From a75369f8cb82f77312b90f67afe96a43e1ca4657 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 16:23:43 -0600 Subject: [PATCH 01/45] contracts-bedrock: custom gas token L1 contracts Implement the L1 contract diff of the custom gas token spec Co-authored-by: Diego <105765223+0xfuturistic@users.noreply.github.com> --- .../src/L1/L1CrossDomainMessenger.sol | 30 ++- .../src/L1/L1StandardBridge.sol | 30 ++- .../src/L1/OptimismPortal.sol | 190 +++++++++++++++++- .../src/L1/ResourceMetering.sol | 10 + .../contracts-bedrock/src/L1/SystemConfig.sol | 52 ++++- 5 files changed, 291 insertions(+), 21 deletions(-) diff --git a/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol index e9840fef55d..d9a071eddf9 100644 --- a/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol @@ -6,6 +6,7 @@ import { OptimismPortal } from "src/L1/OptimismPortal.sol"; import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; import { ISemver } from "src/universal/ISemver.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; +import { SystemConfig } from "src/L1/SystemConfig.sol"; /// @custom:proxied /// @title L1CrossDomainMessenger @@ -20,24 +21,45 @@ contract L1CrossDomainMessenger is CrossDomainMessenger, ISemver { /// @custom:network-specific OptimismPortal public portal; + /// @notice Address of the SystemConfig contract. + SystemConfig public systemConfig; + /// @notice Semantic version. - /// @custom:semver 2.3.0 - string public constant version = "2.3.0"; + /// @custom:semver 2.4.0 + string public constant version = "2.4.0"; /// @notice Constructs the L1CrossDomainMessenger contract. constructor() CrossDomainMessenger() { - initialize({ _superchainConfig: SuperchainConfig(address(0)), _portal: OptimismPortal(payable(address(0))) }); + initialize({ + _superchainConfig: SuperchainConfig(address(0)), + _portal: OptimismPortal(payable(address(0))), + _systemConfig: SystemConfig(address(0)) + }); } /// @notice Initializes the contract. /// @param _superchainConfig Contract of the SuperchainConfig contract on this network. /// @param _portal Contract of the OptimismPortal contract on this network. - function initialize(SuperchainConfig _superchainConfig, OptimismPortal _portal) public initializer { + /// @param _systemConfig Contract of the SystemConfig contract on this network. + function initialize( + SuperchainConfig _superchainConfig, + OptimismPortal _portal, + SystemConfig _systemConfig + ) + public + initializer + { superchainConfig = _superchainConfig; portal = _portal; + systemConfig = _systemConfig; __CrossDomainMessenger_init({ _otherMessenger: CrossDomainMessenger(Predeploys.L2_CROSS_DOMAIN_MESSENGER) }); } + /// @inheritdoc CrossDomainMessenger + function gasPayingToken() public view override returns (address _addr, uint8 _decimals) { + (_addr, _decimals) = systemConfig.gasPayingToken(); + } + /// @notice Getter function for the OptimismPortal contract on this chain. /// Public getter is legacy and will be removed in the future. Use `portal()` instead. /// @return Contract of the OptimismPortal on this chain. diff --git a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol index 9f399999b5f..2b2ab1ccb98 100644 --- a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol +++ b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol @@ -7,6 +7,8 @@ import { ISemver } from "src/universal/ISemver.sol"; import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; import { Constants } from "src/libraries/Constants.sol"; +import { OptimismPortal } from "src/L1/OptimismPortal.sol"; +import { SystemConfig } from "src/L1/SystemConfig.sol"; /// @custom:proxied /// @title L1StandardBridge @@ -70,22 +72,37 @@ contract L1StandardBridge is StandardBridge, ISemver { ); /// @notice Semantic version. - /// @custom:semver 2.1.0 - string public constant version = "2.1.0"; + /// @custom:semver 2.2.0 + string public constant version = "2.2.0"; /// @notice Address of the SuperchainConfig contract. SuperchainConfig public superchainConfig; + /// @notice Address of the SystemConfig contract. + SystemConfig public systemConfig; + /// @notice Constructs the L1StandardBridge contract. constructor() StandardBridge() { - initialize({ _messenger: CrossDomainMessenger(address(0)), _superchainConfig: SuperchainConfig(address(0)) }); + initialize({ + _messenger: CrossDomainMessenger(address(0)), + _superchainConfig: SuperchainConfig(address(0)), + _systemConfig: SystemConfig(address(0)) + }); } /// @notice Initializer. /// @param _messenger Contract for the CrossDomainMessenger on this network. /// @param _superchainConfig Contract for the SuperchainConfig on this network. - function initialize(CrossDomainMessenger _messenger, SuperchainConfig _superchainConfig) public initializer { + function initialize( + CrossDomainMessenger _messenger, + SuperchainConfig _superchainConfig, + SystemConfig _systemConfig + ) + public + initializer + { superchainConfig = _superchainConfig; + systemConfig = _systemConfig; __StandardBridge_init({ _messenger: _messenger, _otherBridge: StandardBridge(payable(Predeploys.L2_STANDARD_BRIDGE)) @@ -102,6 +119,11 @@ contract L1StandardBridge is StandardBridge, ISemver { _initiateETHDeposit(msg.sender, msg.sender, RECEIVE_DEFAULT_GAS_LIMIT, bytes("")); } + /// @inheritdoc StandardBridge + function gasPayingToken() public view override returns (address addr_, uint8 decimals_) { + (addr_, decimals_) = systemConfig.gasPayingToken(); + } + /// @custom:legacy /// @notice Deposits some amount of ETH into the sender's account on L2. /// @param _minGasLimit Minimum gas limit for the deposit message on L2. diff --git a/packages/contracts-bedrock/src/L1/OptimismPortal.sol b/packages/contracts-bedrock/src/L1/OptimismPortal.sol index 6bfcac6e012..6bb8dcd26b2 100644 --- a/packages/contracts-bedrock/src/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/src/L1/OptimismPortal.sol @@ -13,7 +13,10 @@ import { SecureMerkleTrie } from "src/libraries/trie/SecureMerkleTrie.sol"; import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol"; import { ResourceMetering } from "src/L1/ResourceMetering.sol"; import { ISemver } from "src/universal/ISemver.sol"; -import { Constants } from "src/libraries/Constants.sol"; +import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { L1Block } from "src/L2/L1Block.sol"; +import { Predeploys } from "src/libraries/Predeploys.sol"; import "src/libraries/PortalErrors.sol"; /// @custom:proxied @@ -22,6 +25,9 @@ import "src/libraries/PortalErrors.sol"; /// and L2. Messages sent directly to the OptimismPortal have no form of replayability. /// Users are encouraged to use the L1CrossDomainMessenger for a higher-level interface. contract OptimismPortal is Initializable, ResourceMetering, ISemver { + /// @notice Allows for interactions with non standard ERC20 tokens. + using SafeERC20 for IERC20; + /// @notice Represents a proven withdrawal. /// @custom:field outputRoot Root of the L2 output this was proven against. /// @custom:field timestamp Timestamp at whcih the withdrawal was proven. @@ -65,6 +71,11 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { /// @custom:network-specific SystemConfig public systemConfig; + /// @notice The total amount of gas paying asset in the contract. Incremented and decremented on deposits + /// and withdrawals when custom gas token is used. This represents the number of units minted in the + /// L2 units must be scaled appropriately. + uint256 internal _balance; + /// @notice Emitted when a transaction is deposited from L1 to L2. /// The parameters of this event are read by the rollup node and used to derive deposit /// transactions on L2. @@ -150,6 +161,16 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { return _byteCount * 16 + 21000; } + /// @notice Retuns the balance of the contract. + function balance() public view returns (uint256) { + (address token,) = gasPayingToken(); + if (token == Constants.ETHER) { + return address(this).balance; + } else { + return _balance; + } + } + /// @notice Accepts value so that users can send ETH directly to this contract and have the /// funds be deposited to their address on L2. This is intended as a convenience /// function for EOAs. Contracts should call the depositTransaction() function directly @@ -165,6 +186,11 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { // Intentionally empty. } + /// @notice Returns the gas paying token and its decimals. + function gasPayingToken() public view returns (address addr_, uint8 decimals_) { + (addr_, decimals_) = systemConfig.gasPayingToken(); + } + /// @notice Getter for the resource config. /// Used internally by the ResourceMetering contract. /// The SystemConfig is the source of truth for the resource config. @@ -315,16 +341,54 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { finalizedWithdrawals[withdrawalHash] = true; // Set the l2Sender so contracts know who triggered this withdrawal on L2. + // This acts as a reentrancy guard. l2Sender = _tx.sender; - // Trigger the call to the target contract. We use a custom low level method - // SafeCall.callWithMinGas to ensure two key properties - // 1. Target contracts cannot force this call to run out of gas by returning a very large - // amount of data (and this is OK because we don't care about the returndata here). - // 2. The amount of gas provided to the execution context of the target is at least the - // gas limit specified by the user. If there is not enough gas in the current context - // to accomplish this, `callWithMinGas` will revert. - bool success = SafeCall.callWithMinGas(_tx.target, _tx.gasLimit, _tx.value, _tx.data); + bool success; + (address token,) = gasPayingToken(); + if (token == Constants.ETHER) { + // Trigger the call to the target contract. We use a custom low level method + // SafeCall.callWithMinGas to ensure two key properties + // 1. Target contracts cannot force this call to run out of gas by returning a very large + // amount of data (and this is OK because we don't care about the returndata here). + // 2. The amount of gas provided to the execution context of the target is at least the + // gas limit specified by the user. If there is not enough gas in the current context + // to accomplish this, `callWithMinGas` will revert. + success = SafeCall.callWithMinGas(_tx.target, _tx.gasLimit, _tx.value, _tx.data); + } else { + // Cannot call the token contract directly from the portal. This would allow an attacker + // to call approve from a withdrawal and drain the balance of the portal. + if (_tx.target == token) revert BadTarget(); + + // Only transfer value when a non zero value is specified. This saves gas in the case of + // using the standard bridge or arbitrary message passing. + if (_tx.value != 0) { + // Read the balance of the target contract before the transfer so the consistency + // of the transfer can be checked afterwards. + uint256 balanceOf = IERC20(token).balanceOf(address(this)); + + // Update the contracts internal accounting. Do not use the scaled value as this + // is tracking the number of units that are minted in the L2. + _balance -= _tx.value; + + // Transfer the ERC20 balance to the target, accounting for non standard ERC20 + // implementations that may not return a boolean. This reverts if the low level + // call is not successful. + IERC20(token).safeTransfer({ to: _tx.target, value: _tx.value }); + + // The balance must be transferred exactly. + if (IERC20(token).balanceOf(address(this)) != balanceOf - _tx.value) { + revert TransferFailed(); + } + } + + // Make a call to the target contract only if there is calldata. + if (_tx.data.length != 0) { + success = SafeCall.callWithMinGas(_tx.target, _tx.gasLimit, 0, _tx.data); + } else { + success = true; + } + } // Reset the l2Sender back to the default value. l2Sender = Constants.DEFAULT_L2_SENDER; @@ -341,6 +405,54 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { } } + /// @notice Entrypoint to depositing an ERC20 token as a custom gas token. + /// @param _to Target address on L2. + /// @param _mint Units of ERC20 token to deposit into L2. + /// @param _value Units of ERC20 token to send on L2 to the recipient. + /// @param _gasLimit Amount of L2 gas to purchase by burning gas on L1. + /// @param _isCreation Whether or not the transaction is a contract creation. + /// @param _data Data to trigger the recipient with. + function depositERC20Transaction( + address _to, + uint256 _mint, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + public + metered(_gasLimit) + { + // Can only be called if an ERC20 token is used for gas paying on L2 + (address token,) = gasPayingToken(); + if (token == Constants.ETHER) { + revert OnlyCustomGasToken(); + } + + // Get the balance of the portal before the transfer. + uint256 balanceOf = IERC20(token).balanceOf(address(this)); + + // Take ownership of the token. It is assumed that the user has given the portal an approval. + IERC20(token).safeTransferFrom({ from: msg.sender, to: address(this), value: _mint }); + + // Double check that the portal now has the exact amount of token. + if (IERC20(token).balanceOf(address(this)) != balanceOf + _mint) { + revert TransferFailed(); + } + + // Overflow protection here ensures safety on L2 from overflows in balance. + _balance += _mint; + + _depositTransaction({ + _to: _to, + _mint: _mint, + _value: _value, + _gasLimit: _gasLimit, + _isCreation: _isCreation, + _data: _data + }); + } + /// @notice Accepts deposits of ETH and data, and emits a TransactionDeposited event for use in /// deriving deposit transactions. Note that if a deposit is made by a contract, its /// address will be aliased when retrieved using `tx.origin` or `msg.sender`. Consider @@ -360,6 +472,38 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { public payable metered(_gasLimit) + { + (address token,) = gasPayingToken(); + if (token != Constants.ETHER && msg.value != 0) { + revert NoValue(); + } + + _depositTransaction({ + _to: _to, + _mint: msg.value, + _value: _value, + _gasLimit: _gasLimit, + _isCreation: _isCreation, + _data: _data + }); + } + + /// @notice Common logic for creating deposit transactions. + /// @param _to Target address on L2. + /// @param _mint Units of asset to deposit into L2. + /// @param _value Units of asset to send on L2 to the recipient. + /// @param _gasLimit Amount of L2 gas to purchase by burning gas on L1. + /// @param _isCreation Whether or not the transaction is a contract creation. + /// @param _data Data to trigger the recipient with. + function _depositTransaction( + address _to, + uint256 _mint, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + internal { // Just to be safe, make sure that people specify address(0) as the target when doing // contract creations. @@ -384,13 +528,39 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { // Compute the opaque data that will be emitted as part of the TransactionDeposited event. // We use opaque data so that we can update the TransactionDeposited event in the future // without breaking the current interface. - bytes memory opaqueData = abi.encodePacked(msg.value, _value, _gasLimit, _isCreation, _data); + bytes memory opaqueData = abi.encodePacked(_mint, _value, _gasLimit, _isCreation, _data); // Emit a TransactionDeposited event so that the rollup node can derive a deposit // transaction for this deposit. emit TransactionDeposited(from, _to, DEPOSIT_VERSION, opaqueData); } + /// @notice Sets the gas paying token for the L2 system. This token is used as the + /// L2 native asset. Only the SystemConfig contract can call this function. + function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) external { + if (msg.sender != address(systemConfig)) { + revert Unauthorized(); + } + + // Set L2 deposit gas as used without paying burning gas. + useGas(80000); + + // Emit the special deposit transaction directly that sets the gas paying + // token in the L1Block predeploy contract. + emit TransactionDeposited( + 0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001, + Predeploys.L1_BLOCK_ATTRIBUTES, + DEPOSIT_VERSION, + abi.encodePacked( + uint256(0), // mint + uint256(0), // value + uint64(80000), // gasLimit + false, // isCreation, + abi.encodeCall(L1Block.setGasPayingToken, (_token, _decimals, _name, _symbol)) + ) + ); + } + /// @notice Determine if a given output is finalized. /// Reverts if the call to l2Oracle.getL2Output reverts. /// Returns a boolean otherwise. diff --git a/packages/contracts-bedrock/src/L1/ResourceMetering.sol b/packages/contracts-bedrock/src/L1/ResourceMetering.sol index 739d425b6e1..ae6f2d851e0 100644 --- a/packages/contracts-bedrock/src/L1/ResourceMetering.sol +++ b/packages/contracts-bedrock/src/L1/ResourceMetering.sol @@ -147,6 +147,16 @@ abstract contract ResourceMetering is Initializable { } } + /// @notice Adds an amount of L2 gas consumed to the prev bought gas params. This is meant to be used + /// when L2 system transactions are generated from L1. This function is overflow safe due to + /// the constraint of the max resource limit being much larger than `type(uint64).max`. + /// By skipping enforcement of the new sum being smaller than the max resource limit, + /// no frontrunning grief is possible. + /// @param _amount Amount of the L2 gas resource requested. + function useGas(uint64 _amount) internal { + params.prevBoughtGas += _amount; + } + /// @notice Virtual function that returns the resource config. /// Contracts that inherit this contract must implement this function. /// @return ResourceConfig diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index fac82f862e5..a7a57fa61cb 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -6,6 +6,9 @@ import { ISemver } from "src/universal/ISemver.sol"; import { ResourceMetering } from "src/L1/ResourceMetering.sol"; import { Storage } from "src/libraries/Storage.sol"; import { Constants } from "src/libraries/Constants.sol"; +import { OptimismPortal } from "src/L1/OptimismPortal.sol"; +import { GasPayingToken } from "src/libraries/GasPayingToken.sol"; +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; /// @title SystemConfig /// @notice The SystemConfig contract is used to manage configuration of an Optimism network. @@ -26,7 +29,8 @@ contract SystemConfig is OwnableUpgradeable, ISemver { } /// @notice Struct representing the addresses of L1 system contracts. These should be the - /// proxies and are network specific. + /// contracts that users interact with (not implementations for proxied contracts) + /// and are network specific. struct Addresses { address l1CrossDomainMessenger; address l1ERC721Bridge; @@ -34,6 +38,7 @@ contract SystemConfig is OwnableUpgradeable, ISemver { address disputeGameFactory; address optimismPortal; address optimismMintableERC20Factory; + address gasPayingToken; } /// @notice Version identifier, used for upgrades. @@ -76,6 +81,9 @@ contract SystemConfig is OwnableUpgradeable, ISemver { bytes32 public constant DISPUTE_GAME_FACTORY_SLOT = bytes32(uint256(keccak256("systemconfig.disputegamefactory")) - 1); + /// @notice The number of decimals that the gas paying token has. + uint8 internal constant GAS_PAYING_TOKEN_DECIMALS = 18; + /// @notice Fixed L2 gas overhead. Used as part of the L2 fee calculation. uint256 public overhead; @@ -134,7 +142,8 @@ contract SystemConfig is OwnableUpgradeable, ISemver { l1StandardBridge: address(0), disputeGameFactory: address(0), optimismPortal: address(0), - optimismMintableERC20Factory: address(0) + optimismMintableERC20Factory: address(0), + gasPayingToken: address(0) }) }); } @@ -183,6 +192,7 @@ contract SystemConfig is OwnableUpgradeable, ISemver { Storage.setAddress(OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT, _addresses.optimismMintableERC20Factory); _setStartBlock(); + _setGasPayingToken(_addresses.gasPayingToken); _setResourceConfig(_config); require(_gasLimit >= minimumGasLimit(), "SystemConfig: gas limit too low"); @@ -227,7 +237,7 @@ contract SystemConfig is OwnableUpgradeable, ISemver { } /// @notice Getter for the OptimismPortal address. - function optimismPortal() external view returns (address addr_) { + function optimismPortal() public view returns (address addr_) { addr_ = Storage.getAddress(OPTIMISM_PORTAL_SLOT); } @@ -246,6 +256,42 @@ contract SystemConfig is OwnableUpgradeable, ISemver { startBlock_ = Storage.getUint(START_BLOCK_SLOT); } + /// @notice Getter for the gas paying asset address. + function gasPayingToken() external view returns (address addr_, uint8 decimals_) { + (addr_, decimals_) = GasPayingToken.getToken(); + } + + /// @notice Getter for the gas paying token name. + function gasPayingTokenName() external view returns (string memory name_) { + name_ = GasPayingToken.getName(); + } + + /// @notice Getter for the gas paying token symbol. + function gasPayingTokenSymbol() external view returns (string memory symbol_) { + symbol_ = GasPayingToken.getSymbol(); + } + + /// @notice Internal setter for the gas paying token address, includes validation. + /// @param _token Address of the gas paying token. + function _setGasPayingToken(address _token) internal { + if (_token != address(0) && _token != Constants.ETHER) { + require( + ERC20(_token).decimals() == GAS_PAYING_TOKEN_DECIMALS, "SystemConfig: bad decimals of gas paying token" + ); + bytes32 name = GasPayingToken.sanitize(ERC20(_token).name()); + bytes32 symbol = GasPayingToken.sanitize(ERC20(_token).symbol()); + + // Set the gas paying token in storage and in the OptimismPortal. + GasPayingToken.set({ _token: _token, _decimals: GAS_PAYING_TOKEN_DECIMALS, _name: name, _symbol: symbol }); + OptimismPortal(payable(optimismPortal())).setGasPayingToken({ + _token: _token, + _decimals: GAS_PAYING_TOKEN_DECIMALS, + _name: name, + _symbol: symbol + }); + } + } + /// @notice Updates the unsafe block signer address. Can only be called by the owner. /// @param _unsafeBlockSigner New unsafe block signer address. function setUnsafeBlockSigner(address _unsafeBlockSigner) external onlyOwner { From d80c5a411334b280953f68e38ec46780a4aaa5ae Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 16:24:31 -0600 Subject: [PATCH 02/45] contracts-bedrock: custom gas token L2 contracts Implement the L2 contract diff of the custom gas token spec Co-authored-by: Diego <105765223+0xfuturistic@users.noreply.github.com> --- packages/contracts-bedrock/src/L2/L1Block.sol | 49 ++++++++++++++++++- .../src/L2/L2CrossDomainMessenger.sol | 9 +++- .../src/L2/L2StandardBridge.sol | 11 +++-- packages/contracts-bedrock/src/L2/WETH.sol | 22 +++++++++ 4 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 packages/contracts-bedrock/src/L2/WETH.sol diff --git a/packages/contracts-bedrock/src/L2/L1Block.sol b/packages/contracts-bedrock/src/L2/L1Block.sol index 50eff3bc58b..d9b5b88126f 100644 --- a/packages/contracts-bedrock/src/L2/L1Block.sol +++ b/packages/contracts-bedrock/src/L2/L1Block.sol @@ -2,6 +2,9 @@ pragma solidity 0.8.15; import { ISemver } from "src/universal/ISemver.sol"; +import { Constants } from "src/libraries/Constants.sol"; +import { Storage } from "src/libraries/Storage.sol"; +import { GasPayingToken } from "src/libraries/GasPayingToken.sol"; /// @custom:proxied /// @custom:predeploy 0x4200000000000000000000000000000000000015 @@ -11,6 +14,12 @@ import { ISemver } from "src/universal/ISemver.sol"; /// set by the "depositor" account, a special system address. Depositor account transactions /// are created by the protocol whenever we move to a new epoch. contract L1Block is ISemver { + /// @notice Error returns when a non-depositor account tries to set L1 block values. + error NotDepositor(); + + /// @notice Event emitted when the gas paying token is set. + event GasPayingTokenSet(address indexed token, uint8 indexed decimals, bytes32 name, bytes32 symbol); + /// @notice Address of the special depositor account. address public constant DEPOSITOR_ACCOUNT = 0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001; @@ -49,9 +58,34 @@ contract L1Block is ISemver { /// @notice The latest L1 blob base fee. uint256 public blobBaseFee; - /// @custom:semver 1.3.0 + /// @custom:semver 1.4.0 function version() public pure virtual returns (string memory) { - return "1.3.0"; + return "1.4.0"; + } + + /// @notice Returns the gas paying token, its decimals, name and symbol. + /// If nothing is set in state, then it means ether is used. + function gasPayingToken() public view returns (address addr_, uint8 decimals_) { + (addr_, decimals_) = GasPayingToken.getToken(); + } + + /// @notice Returns the gas paying token name. + /// If nothing is set in state, then it means ether is used. + function gasPayingTokenName() public view returns (string memory name_) { + name_ = GasPayingToken.getName(); + } + + /// @notice Returns the gas paying token symbol. + /// If nothing is set in state, then it means ether is used. + function gasPayingTokenSymbol() public view returns (string memory symbol_) { + symbol_ = GasPayingToken.getSymbol(); + } + + /// @notice Getter for custom gas token paying networks. Returns true if the + /// network uses a custom gas token. + function isCustomGasToken() public view returns (bool) { + (address token,) = gasPayingToken(); + return token != Constants.ETHER; } /// @custom:legacy @@ -117,4 +151,15 @@ contract L1Block is ISemver { sstore(batcherHash.slot, calldataload(132)) // bytes32 } } + + /// @notice Sets the gas paying token for the L2 system. Can only be called by the special + /// depositor account. This function is not called on every L2 block but instead + /// only called by specially crafted L1 deposit transactions. + function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) external { + if (msg.sender != DEPOSITOR_ACCOUNT) revert NotDepositor(); + + GasPayingToken.set({ _token: _token, _decimals: _decimals, _name: _name, _symbol: _symbol }); + + emit GasPayingTokenSet({ token: _token, decimals: _decimals, name: _name, symbol: _symbol }); + } } diff --git a/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol index ad0e117d3f7..e5e003de318 100644 --- a/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol @@ -7,6 +7,8 @@ import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; import { ISemver } from "src/universal/ISemver.sol"; import { L2ToL1MessagePasser } from "src/L2/L2ToL1MessagePasser.sol"; import { Constants } from "src/libraries/Constants.sol"; +import { L1Block } from "src/L2/L1Block.sol"; +import { Predeploys } from "src/libraries/Predeploys.sol"; /// @custom:proxied /// @custom:predeploy 0x4200000000000000000000000000000000000007 @@ -16,7 +18,7 @@ import { Constants } from "src/libraries/Constants.sol"; /// level message passing contracts. contract L2CrossDomainMessenger is CrossDomainMessenger, ISemver { /// @custom:semver 2.0.0 - string public constant version = "2.0.0"; + string public constant version = "2.1.0"; /// @notice Constructs the L2CrossDomainMessenger contract. constructor() CrossDomainMessenger() { @@ -44,6 +46,11 @@ contract L2CrossDomainMessenger is CrossDomainMessenger, ISemver { ); } + /// @inheritdoc CrossDomainMessenger + function gasPayingToken() public view override returns (address addr_, uint8 decimals_) { + (addr_, decimals_) = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingToken(); + } + /// @inheritdoc CrossDomainMessenger function _isOtherMessenger() internal view override returns (bool) { return AddressAliasHelper.undoL1ToL2Alias(msg.sender) == address(otherMessenger); diff --git a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol index 69319560ae1..923e580074b 100644 --- a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol +++ b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol @@ -6,7 +6,7 @@ import { StandardBridge } from "src/universal/StandardBridge.sol"; import { ISemver } from "src/universal/ISemver.sol"; import { OptimismMintableERC20 } from "src/universal/OptimismMintableERC20.sol"; import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; -import { Constants } from "src/libraries/Constants.sol"; +import { L1Block } from "src/L2/L1Block.sol"; /// @custom:proxied /// @custom:predeploy 0x4200000000000000000000000000000000000010 @@ -52,8 +52,8 @@ contract L2StandardBridge is StandardBridge, ISemver { bytes extraData ); - /// @custom:semver 1.8.0 - string public constant version = "1.8.0"; + /// @custom:semver 1.9.0 + string public constant version = "1.9.0"; /// @notice Constructs the L2StandardBridge contract. constructor() StandardBridge() { @@ -76,6 +76,11 @@ contract L2StandardBridge is StandardBridge, ISemver { ); } + /// @inheritdoc StandardBridge + function gasPayingToken() public view override returns (address addr_, uint8 decimals_) { + (addr_, decimals_) = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingToken(); + } + /// @custom:legacy /// @notice Initiates a withdrawal from L2 to L1. /// This function only works with OptimismMintableERC20 tokens or ether. Use the diff --git a/packages/contracts-bedrock/src/L2/WETH.sol b/packages/contracts-bedrock/src/L2/WETH.sol new file mode 100644 index 00000000000..d7b6e6d7c4b --- /dev/null +++ b/packages/contracts-bedrock/src/L2/WETH.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +import { WETH98 } from "src/dispute/weth/WETH98.sol"; +import { Predeploys } from "src/libraries/Predeploys.sol"; +import { L1Block } from "src/L2/L1Block.sol"; + +/// @title WETH contract that reads the name and symbol from the L1Block contract. +/// Allows for nice rendering of token names for chains using custom gas token. +contract WETH is WETH98 { + /// @notice Returns the name of the wrapped native asset. Will be "Wrapped Ether" + /// if the native asset is Ether. + function name() external view override returns (string memory name_) { + name_ = string.concat("Wrapped ", L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingTokenName()); + } + + /// @notice Returns the symbol of the wrapped native asset. Will be "WETH" if the + /// native asset is Ether. + function symbol() external view override returns (string memory symbol_) { + symbol_ = string.concat("W", L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingTokenSymbol()); + } +} From 3a0b50dcbf62528988327d7d73ef323ff6b1e280 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 16:25:32 -0600 Subject: [PATCH 03/45] contracts-bedrock: custom gas token contracts Libraries and universal contracts in the custom gas token spec Co-authored-by: Diego <105765223+0xfuturistic@users.noreply.github.com> --- .../src/libraries/Constants.sol | 3 + .../src/libraries/GasPayingToken.sol | 73 +++++++++++++++++++ .../src/libraries/Predeploys.sol | 4 +- .../src/universal/CrossDomainMessenger.sol | 15 ++++ .../src/universal/StandardBridge.sol | 14 ++++ 5 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 packages/contracts-bedrock/src/libraries/GasPayingToken.sol diff --git a/packages/contracts-bedrock/src/libraries/Constants.sol b/packages/contracts-bedrock/src/libraries/Constants.sol index 933250d1ecd..e51509ffd41 100644 --- a/packages/contracts-bedrock/src/libraries/Constants.sol +++ b/packages/contracts-bedrock/src/libraries/Constants.sol @@ -30,6 +30,9 @@ library Constants { /// @dev `bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)` bytes32 internal constant PROXY_OWNER_ADDRESS = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; + /// @notice The address that represents ether when dealing with ERC20 token addresses. + address internal constant ETHER = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); + /// @notice Returns the default values for the ResourceConfig. These are the recommended values /// for a production network. function DEFAULT_RESOURCE_CONFIG() internal pure returns (ResourceMetering.ResourceConfig memory) { diff --git a/packages/contracts-bedrock/src/libraries/GasPayingToken.sol b/packages/contracts-bedrock/src/libraries/GasPayingToken.sol new file mode 100644 index 00000000000..6ebfa9bb875 --- /dev/null +++ b/packages/contracts-bedrock/src/libraries/GasPayingToken.sol @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import { Storage } from "src/libraries/Storage.sol"; +import { Constants } from "src/libraries/Constants.sol"; +import { LibString } from "@solady/utils/LibString.sol"; + +/// @title GasPayingToken +/// @notice Handles reading and writing the custom gas token to storage. +/// To be used in any place where gas token information is read or +/// written to state. If multiple contracts use this library, the +/// values in storage should be kept in sync between them. +library GasPayingToken { + /// @notice The storage slot that contains the address and decimals of the gas paying token + bytes32 internal constant GAS_PAYING_TOKEN_SLOT = bytes32(uint256(keccak256("opstack.gaspayingtoken")) - 1); + + /// @notice The storage slot that contains the ERC20 `name()` of the gas paying token + bytes32 internal constant GAS_PAYING_TOKEN_NAME_SLOT = bytes32(uint256(keccak256("opstack.gaspayingtokenname")) - 1); + + /// @notice the storage slot that contains the ERC20 `symbol()` of the gas paying token + bytes32 internal constant GAS_PAYING_TOKEN_SYMBOL_SLOT = + bytes32(uint256(keccak256("opstack.gaspayingtokensymbol")) - 1); + + /// @notice Reads the gas paying token and its decimals from the magic + /// storage slot. If nothing is set in storage, then the ether + /// address is returned instead. + function getToken() internal view returns (address addr_, uint8 decimals_) { + bytes32 slot = Storage.getBytes32(GAS_PAYING_TOKEN_SLOT); + addr_ = address(uint160(uint256(slot) & uint256(type(uint160).max))); + if (addr_ == address(0)) { + addr_ = Constants.ETHER; + decimals_ = 18; + } else { + decimals_ = uint8(uint256(slot) >> 160); + } + } + + /// @notice Reads the gas paying token's name from the magic storage slot. + /// If nothing is set in storage, then the ether name, 'Ether', is returned instead. + function getName() internal view returns (string memory name_) { + (address addr,) = getToken(); + if (addr == Constants.ETHER) { + name_ = "Ether"; + } else { + name_ = LibString.fromSmallString(Storage.getBytes32(GAS_PAYING_TOKEN_NAME_SLOT)); + } + } + + /// @notice Reads the gas paying token's symbol from the magic storage slot. + /// If nothing is set in storage, then the ether symbol, 'ETH', is returned instead. + function getSymbol() internal view returns (string memory symbol_) { + (address addr,) = getToken(); + if (addr == Constants.ETHER) { + symbol_ = "ETH"; + } else { + symbol_ = LibString.fromSmallString(Storage.getBytes32(GAS_PAYING_TOKEN_SYMBOL_SLOT)); + } + } + + /// @notice Writes the gas paying token, its decimals, name and symbol to the magic storage slot. + function set(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) internal { + Storage.setBytes32(GAS_PAYING_TOKEN_SLOT, bytes32(uint256(_decimals) << 160 | uint256(uint160(_token)))); + Storage.setBytes32(GAS_PAYING_TOKEN_NAME_SLOT, _name); + Storage.setBytes32(GAS_PAYING_TOKEN_SYMBOL_SLOT, _symbol); + } + + /// @notice Maps a string to a normalized null-terminated small string. + function sanitize(string memory _str) internal pure returns (bytes32) { + require(bytes(_str).length <= 32, "GasPayingToken: string cannot be greater than 32 bytes"); + + return LibString.toSmallString(_str); + } +} diff --git a/packages/contracts-bedrock/src/libraries/Predeploys.sol b/packages/contracts-bedrock/src/libraries/Predeploys.sol index ebb5ae4e067..bd36a7e7905 100644 --- a/packages/contracts-bedrock/src/libraries/Predeploys.sol +++ b/packages/contracts-bedrock/src/libraries/Predeploys.sol @@ -23,8 +23,8 @@ library Predeploys { /// @notice Address of the DeployerWhitelist predeploy. No longer active. address internal constant DEPLOYER_WHITELIST = 0x4200000000000000000000000000000000000002; - /// @notice Address of the canonical WETH9 contract. - address internal constant WETH9 = 0x4200000000000000000000000000000000000006; + /// @notice Address of the canonical WETH contract. + address internal constant WETH = 0x4200000000000000000000000000000000000006; /// @notice Address of the L2CrossDomainMessenger predeploy. address internal constant L2_CROSS_DOMAIN_MESSENGER = 0x4200000000000000000000000000000000000007; diff --git a/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol b/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol index 071008d13e5..f850c0ddaf8 100644 --- a/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol @@ -174,6 +174,10 @@ abstract contract CrossDomainMessenger is /// @param _message Message to trigger the target address with. /// @param _minGasLimit Minimum gas limit that the message can be executed with. function sendMessage(address _target, bytes calldata _message, uint32 _minGasLimit) external payable { + if (isCustomGasToken()) { + require(msg.value == 0, "CrossDomainMessenger: cannot send value with custom gas token"); + } + // Triggers a message to the other messenger. Note that the amount of gas provided to the // message is the amount of gas requested by the user PLUS the base gas value. We want to // guarantee the property that the call to the target contract will always have at least @@ -358,6 +362,17 @@ abstract contract CrossDomainMessenger is + RELAY_GAS_CHECK_BUFFER; } + /// @notice Getter for the ERC20 token address that is used to pay for gas + /// and its decimals. Must be implemented by the contracts that inherit it. + function gasPayingToken() public virtual returns (address, uint8); + + /// @notice Getter for custom gas token paying networks. Returns true if the + /// network uses a custom gas token. + function isCustomGasToken() public returns (bool) { + (address token,) = gasPayingToken(); + return token != Constants.ETHER; + } + /// @notice Initializer. /// @param _otherMessenger CrossDomainMessenger contract on the other chain. function __CrossDomainMessenger_init(CrossDomainMessenger _otherMessenger) internal onlyInitializing { diff --git a/packages/contracts-bedrock/src/universal/StandardBridge.sol b/packages/contracts-bedrock/src/universal/StandardBridge.sol index 63a8622aa09..e6732fb957d 100644 --- a/packages/contracts-bedrock/src/universal/StandardBridge.sol +++ b/packages/contracts-bedrock/src/universal/StandardBridge.sol @@ -10,6 +10,7 @@ import { IOptimismMintableERC20, ILegacyMintableERC20 } from "src/universal/IOpt import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; import { OptimismMintableERC20 } from "src/universal/OptimismMintableERC20.sol"; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; +import { Constants } from "src/libraries/Constants.sol"; /// @custom:upgradeable /// @title StandardBridge @@ -129,6 +130,17 @@ abstract contract StandardBridge is Initializable { /// Must be implemented by contracts that inherit. receive() external payable virtual; + /// @notice Getter for the ERC20 token address that is used to pay for gas + /// and its decimals. Must be implemented by the contracts that inherit it. + function gasPayingToken() public virtual returns (address, uint8); + + /// @notice Getter for custom gas token paying networks. Returns true if the + /// network uses a custom gas token. + function isCustomGasToken() public returns (bool) { + (address token,) = gasPayingToken(); + return token != Constants.ETHER; + } + /// @notice Getter for messenger contract. /// Public getter is legacy and will be removed in the future. Use `messenger` instead. /// @return Contract of the messenger on this domain. @@ -242,6 +254,7 @@ abstract contract StandardBridge is Initializable { onlyOtherBridge { require(paused() == false, "StandardBridge: paused"); + require(isCustomGasToken() == false, "StandardBridge: cannot bridge ETH with custom gas token"); require(msg.value == _amount, "StandardBridge: amount sent does not match amount required"); require(_to != address(this), "StandardBridge: cannot send to self"); require(_to != address(messenger), "StandardBridge: cannot send to messenger"); @@ -310,6 +323,7 @@ abstract contract StandardBridge is Initializable { ) internal { + require(isCustomGasToken() == false, "StandardBridge: cannot bridge ETH with custom gas token"); require(msg.value == _amount, "StandardBridge: bridging ETH must include sufficient ETH value"); // Emit the correct events. By default this will be _amount, but child From e83e6ed716a45402b0fa281eb1b5c74348ecf37f Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 16:26:30 -0600 Subject: [PATCH 04/45] contracts-bedrock: custom gas token scripts Implement the scripts for the custom gas token spec Co-authored-by: Diego <105765223+0xfuturistic@users.noreply.github.com> --- .../contracts-bedrock/scripts/Artifacts.s.sol | 4 +- .../contracts-bedrock/scripts/Deploy.s.sol | 42 +++++++++++++------ .../scripts/DeployConfig.s.sol | 16 +++++++ 3 files changed, 47 insertions(+), 15 deletions(-) diff --git a/packages/contracts-bedrock/scripts/Artifacts.s.sol b/packages/contracts-bedrock/scripts/Artifacts.s.sol index 253989b25eb..d8b8a218e92 100644 --- a/packages/contracts-bedrock/scripts/Artifacts.s.sol +++ b/packages/contracts-bedrock/scripts/Artifacts.s.sol @@ -129,8 +129,8 @@ abstract contract Artifacts { return payable(Predeploys.L1_MESSAGE_SENDER); } else if (digest == keccak256(bytes("DeployerWhitelist"))) { return payable(Predeploys.DEPLOYER_WHITELIST); - } else if (digest == keccak256(bytes("WETH9"))) { - return payable(Predeploys.WETH9); + } else if (digest == keccak256(bytes("WETH"))) { + return payable(Predeploys.WETH); } else if (digest == keccak256(bytes("LegacyERC20ETH"))) { return payable(Predeploys.LEGACY_ERC20_ETH); } else if (digest == keccak256(bytes("L1BlockNumber"))) { diff --git a/packages/contracts-bedrock/scripts/Deploy.s.sol b/packages/contracts-bedrock/scripts/Deploy.s.sol index a0c539adb3e..ee07347a99c 100644 --- a/packages/contracts-bedrock/scripts/Deploy.s.sol +++ b/packages/contracts-bedrock/scripts/Deploy.s.sol @@ -380,16 +380,6 @@ contract Deploy is Deployer { /// @notice Initialize all of the implementations function initializeImplementations() public { console.log("Initializing implementations"); - initializeSystemConfig(); - initializeL1StandardBridge(); - initializeL1ERC721Bridge(); - initializeOptimismMintableERC20Factory(); - initializeL1CrossDomainMessenger(); - initializeL2OutputOracle(); - initializeDisputeGameFactory(); - initializeDelayedWETH(); - initializeAnchorStateRegistry(); - // Selectively initialize either the original OptimismPortal or the new OptimismPortal2. Since this will upgrade // the proxy, we cannot initialize both. FPAC warning can be removed once we're done with the old OptimismPortal // contract. @@ -399,6 +389,16 @@ contract Deploy is Deployer { } else { initializeOptimismPortal(); } + + initializeSystemConfig(); + initializeL1StandardBridge(); + initializeL1ERC721Bridge(); + initializeOptimismMintableERC20Factory(); + initializeL1CrossDomainMessenger(); + initializeL2OutputOracle(); + initializeDisputeGameFactory(); + initializeDelayedWETH(); + initializeAnchorStateRegistry(); } /// @notice Add Plasma setup to the OP chain @@ -945,6 +945,11 @@ contract Deploy is Deployer { bytes32 batcherHash = bytes32(uint256(uint160(cfg.batchSenderAddress()))); + address customGasTokenAddress = Constants.ETHER; + if (cfg.useCustomGasToken()) { + customGasTokenAddress = cfg.customGasTokenAddress(); + } + _upgradeAndCallViaSafe({ _proxy: payable(systemConfigProxy), _implementation: systemConfig, @@ -965,7 +970,8 @@ contract Deploy is Deployer { l1StandardBridge: mustGetAddress("L1StandardBridgeProxy"), disputeGameFactory: mustGetAddress("DisputeGameFactoryProxy"), optimismPortal: mustGetAddress("OptimismPortalProxy"), - optimismMintableERC20Factory: mustGetAddress("OptimismMintableERC20FactoryProxy") + optimismMintableERC20Factory: mustGetAddress("OptimismMintableERC20FactoryProxy"), + gasPayingToken: customGasTokenAddress }) ) ) @@ -986,6 +992,7 @@ contract Deploy is Deployer { address l1StandardBridge = mustGetAddress("L1StandardBridge"); address l1CrossDomainMessengerProxy = mustGetAddress("L1CrossDomainMessengerProxy"); address superchainConfigProxy = mustGetAddress("SuperchainConfigProxy"); + address systemConfigProxy = mustGetAddress("SystemConfigProxy"); uint256 proxyType = uint256(proxyAdmin.proxyType(l1StandardBridgeProxy)); if (proxyType != uint256(ProxyAdmin.ProxyType.CHUGSPLASH)) { @@ -1001,7 +1008,11 @@ contract Deploy is Deployer { _implementation: l1StandardBridge, _innerCallData: abi.encodeCall( L1StandardBridge.initialize, - (L1CrossDomainMessenger(l1CrossDomainMessengerProxy), SuperchainConfig(superchainConfigProxy)) + ( + L1CrossDomainMessenger(l1CrossDomainMessengerProxy), + SuperchainConfig(superchainConfigProxy), + SystemConfig(systemConfigProxy) + ) ) }); @@ -1063,6 +1074,7 @@ contract Deploy is Deployer { address l1CrossDomainMessenger = mustGetAddress("L1CrossDomainMessenger"); address superchainConfigProxy = mustGetAddress("SuperchainConfigProxy"); address optimismPortalProxy = mustGetAddress("OptimismPortalProxy"); + address systemConfigProxy = mustGetAddress("SystemConfigProxy"); uint256 proxyType = uint256(proxyAdmin.proxyType(l1CrossDomainMessengerProxy)); if (proxyType != uint256(ProxyAdmin.ProxyType.RESOLVED)) { @@ -1091,7 +1103,11 @@ contract Deploy is Deployer { _implementation: l1CrossDomainMessenger, _innerCallData: abi.encodeCall( L1CrossDomainMessenger.initialize, - (SuperchainConfig(superchainConfigProxy), OptimismPortal(payable(optimismPortalProxy))) + ( + SuperchainConfig(superchainConfigProxy), + OptimismPortal(payable(optimismPortalProxy)), + SystemConfig(systemConfigProxy) + ) ) }); diff --git a/packages/contracts-bedrock/scripts/DeployConfig.s.sol b/packages/contracts-bedrock/scripts/DeployConfig.s.sol index 64ec0d57799..86a218a3698 100644 --- a/packages/contracts-bedrock/scripts/DeployConfig.s.sol +++ b/packages/contracts-bedrock/scripts/DeployConfig.s.sol @@ -74,6 +74,9 @@ contract DeployConfig is Script { uint256 public daBondSize; uint256 public daResolverRefundPercentage; + bool public useCustomGasToken; + address public customGasTokenAddress; + function read(string memory _path) public { console.log("DeployConfig: reading file %s", _path); try vm.readFile(_path) returns (string memory data) { @@ -145,6 +148,9 @@ contract DeployConfig is Script { daResolveWindow = _readOr(_json, "$.daResolveWindow", 1000); daBondSize = _readOr(_json, "$.daBondSize", 1000000000); daResolverRefundPercentage = _readOr(_json, "$.daResolverRefundPercentage", 0); + + useCustomGasToken = _readOr(_json, "$.useCustomGasToken", false); + customGasTokenAddress = _readOr(_json, "$.customGasTokenAddress", address(0)); } function l1StartingBlockTag() public returns (bytes32) { @@ -190,6 +196,12 @@ contract DeployConfig is Script { fundDevAccounts = _fundDevAccounts; } + /// @notice Allow the `useCustomGasToken` config to be overridden in testing environments + function setUseCustomGasToken(address _token) public { + useCustomGasToken = true; + customGasTokenAddress = _token; + } + function _getBlockByTag(string memory _tag) internal returns (bytes32) { string[] memory cmd = new string[](3); cmd[0] = Executables.bash; @@ -206,4 +218,8 @@ contract DeployConfig is Script { function _readOr(string memory json, string memory key, uint256 defaultValue) internal view returns (uint256) { return vm.keyExists(json, key) ? stdJson.readUint(json, key) : defaultValue; } + + function _readOr(string memory json, string memory key, address defaultValue) internal view returns (address) { + return vm.keyExists(json, key) ? stdJson.readAddress(json, key) : defaultValue; + } } From 30685bf78b56ea0f648a270d6bcc8d8ff611482e Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 16:27:10 -0600 Subject: [PATCH 05/45] contracts-bedrock: custom gas token tests Implement tests for the custom gas token spec Co-authored-by: Diego <105765223+0xfuturistic@users.noreply.github.com> --- .../contracts-bedrock/scripts/L2Genesis.s.sol | 30 +- .../snapshots/abi/L1Block.json | 121 +++ .../snapshots/abi/L1BlockInterop.json | 121 +++ .../snapshots/abi/L1CrossDomainMessenger.json | 49 ++ .../snapshots/abi/L1StandardBridge.json | 49 ++ .../snapshots/abi/L2CrossDomainMessenger.json | 31 + .../snapshots/abi/L2StandardBridge.json | 31 + .../snapshots/abi/OptimismPortal.json | 117 +++ .../snapshots/abi/SystemConfig.json | 49 ++ .../contracts-bedrock/snapshots/abi/WETH.json | 290 ++++++++ .../snapshots/state-diff/Kontrol-Deploy.json | 696 ++++++++++-------- .../storageLayout/L1CrossDomainMessenger.json | 7 + .../storageLayout/L1StandardBridge.json | 7 + .../storageLayout/OptimismPortal.json | 7 + .../snapshots/storageLayout/WETH.json | 16 + .../src/libraries/Predeploys.sol | 6 +- .../test/L1/L1CrossDomainMessenger.t.sol | 153 +++- .../test/L1/L1StandardBridge.t.sol | 229 +++++- .../test/L1/OptimismPortal.t.sol | 528 ++++++++++++- .../test/L1/ResourceMetering.t.sol | 10 + .../test/L1/SystemConfig.t.sol | 178 ++++- .../contracts-bedrock/test/L2/L1Block.t.sol | 41 ++ .../test/L2/L2CrossDomainMessenger.t.sol | 134 ++++ .../test/L2/L2StandardBridge.t.sol | 254 ++++++- packages/contracts-bedrock/test/L2/WETH.t.sol | 38 + .../contracts-bedrock/test/Predeploys.t.sol | 4 +- packages/contracts-bedrock/test/Specs.t.sol | 20 +- .../invariants/CrossDomainMessenger.t.sol | 2 + .../test/invariants/SystemConfig.t.sol | 3 +- .../proofs/utils/DeploymentSummary.sol | 22 +- .../proofs/utils/DeploymentSummaryCode.sol | 8 +- .../test/libraries/GasPayingToken.t.sol | 109 +++ .../test/setup/CommonTest.sol | 16 +- .../contracts-bedrock/test/setup/Setup.sol | 3 + .../test/universal/StandardBridge.t.sol | 5 + .../test/vendor/Initializable.t.sol | 22 +- 36 files changed, 2982 insertions(+), 424 deletions(-) create mode 100644 packages/contracts-bedrock/snapshots/abi/WETH.json create mode 100644 packages/contracts-bedrock/snapshots/storageLayout/WETH.json create mode 100644 packages/contracts-bedrock/test/L2/WETH.t.sol create mode 100644 packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol diff --git a/packages/contracts-bedrock/scripts/L2Genesis.s.sol b/packages/contracts-bedrock/scripts/L2Genesis.s.sol index 17ca6b13a3f..4a23ed32d25 100644 --- a/packages/contracts-bedrock/scripts/L2Genesis.s.sol +++ b/packages/contracts-bedrock/scripts/L2Genesis.s.sol @@ -217,7 +217,7 @@ contract L2Genesis is Deployer { // 01: legacy, not used in OP-Stack setDeployerWhitelist(); // 2 // 3,4,5: legacy, not used in OP-Stack. - setWETH9(); // 6: WETH9 (not behind a proxy) + setWETH(); // 6: WETH (not behind a proxy) setL2CrossDomainMessenger(_l1Dependencies.l1CrossDomainMessengerProxy); // 7 // 8,9,A,B,C,D,E: legacy, not used in OP-Stack. setGasPriceOracle(); // f @@ -347,31 +347,9 @@ contract L2Genesis is Deployer { /// @notice This predeploy is following the safety invariant #1. /// This contract is NOT proxied and the state that is set /// in the constructor is set manually. - function setWETH9() public { - console.log("Setting %s implementation at: %s", "WETH9", Predeploys.WETH9); - vm.etch(Predeploys.WETH9, vm.getDeployedCode("WETH9.sol:WETH9")); - - vm.store( - Predeploys.WETH9, - /// string public name - hex"0000000000000000000000000000000000000000000000000000000000000000", - /// "Wrapped Ether" - hex"577261707065642045746865720000000000000000000000000000000000001a" - ); - vm.store( - Predeploys.WETH9, - /// string public symbol - hex"0000000000000000000000000000000000000000000000000000000000000001", - /// "WETH" - hex"5745544800000000000000000000000000000000000000000000000000000008" - ); - vm.store( - Predeploys.WETH9, - // uint8 public decimals - hex"0000000000000000000000000000000000000000000000000000000000000002", - /// 18 - hex"0000000000000000000000000000000000000000000000000000000000000012" - ); + function setWETH() public { + console.log("Setting %s implementation at: %s", "WETH", Predeploys.WETH); + vm.etch(Predeploys.WETH, vm.getDeployedCode("WETH.sol:WETH")); } /// @notice This predeploy is following the safety invariant #1. diff --git a/packages/contracts-bedrock/snapshots/abi/L1Block.json b/packages/contracts-bedrock/snapshots/abi/L1Block.json index e4860af42b5..e29645c3c61 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1Block.json +++ b/packages/contracts-bedrock/snapshots/abi/L1Block.json @@ -77,6 +77,50 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "gasPayingToken", + "outputs": [ + { + "internalType": "address", + "name": "addr_", + "type": "address" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasPayingTokenName", + "outputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasPayingTokenSymbol", + "outputs": [ + { + "internalType": "string", + "name": "symbol_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "hash", @@ -90,6 +134,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "isCustomGasToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "l1FeeOverhead", @@ -142,6 +199,34 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint8", + "name": "_decimals", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_name", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_symbol", + "type": "bytes32" + } + ], + "name": "setGasPayingToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -222,5 +307,41 @@ ], "stateMutability": "pure", "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "name", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "symbol", + "type": "bytes32" + } + ], + "name": "GasPayingTokenSet", + "type": "event" + }, + { + "inputs": [], + "name": "NotDepositor", + "type": "error" } ] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/abi/L1BlockInterop.json b/packages/contracts-bedrock/snapshots/abi/L1BlockInterop.json index df05556d10b..50d0e2f4f81 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1BlockInterop.json +++ b/packages/contracts-bedrock/snapshots/abi/L1BlockInterop.json @@ -109,6 +109,50 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "gasPayingToken", + "outputs": [ + { + "internalType": "address", + "name": "addr_", + "type": "address" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasPayingTokenName", + "outputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasPayingTokenSymbol", + "outputs": [ + { + "internalType": "string", + "name": "symbol_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "hash", @@ -122,6 +166,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "isCustomGasToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -193,6 +250,34 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint8", + "name": "_decimals", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_name", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_symbol", + "type": "bytes32" + } + ], + "name": "setGasPayingToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -280,5 +365,41 @@ ], "stateMutability": "pure", "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint8", + "name": "decimals", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "name", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "symbol", + "type": "bytes32" + } + ], + "name": "GasPayingTokenSet", + "type": "event" + }, + { + "inputs": [], + "name": "NotDepositor", + "type": "error" } ] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json b/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json index d330b13b802..30c68fbaf94 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json +++ b/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json @@ -177,6 +177,24 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "gasPayingToken", + "outputs": [ + { + "internalType": "address", + "name": "_addr", + "type": "address" + }, + { + "internalType": "uint8", + "name": "_decimals", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -188,6 +206,11 @@ "internalType": "contract OptimismPortal", "name": "_portal", "type": "address" + }, + { + "internalType": "contract SystemConfig", + "name": "_systemConfig", + "type": "address" } ], "name": "initialize", @@ -195,6 +218,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "isCustomGasToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "messageNonce", @@ -340,6 +376,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "systemConfig", + "outputs": [ + { + "internalType": "contract SystemConfig", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "version", diff --git a/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json b/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json index ab658ac7e5b..a7bffd19e9d 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json +++ b/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json @@ -414,6 +414,24 @@ "stateMutability": "payable", "type": "function" }, + { + "inputs": [], + "name": "gasPayingToken", + "outputs": [ + { + "internalType": "address", + "name": "addr_", + "type": "address" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -425,6 +443,11 @@ "internalType": "contract SuperchainConfig", "name": "_superchainConfig", "type": "address" + }, + { + "internalType": "contract SystemConfig", + "name": "_systemConfig", + "type": "address" } ], "name": "initialize", @@ -432,6 +455,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "isCustomGasToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "l2TokenBridge", @@ -497,6 +533,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "systemConfig", + "outputs": [ + { + "internalType": "contract SystemConfig", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "version", diff --git a/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json b/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json index 717bbb6eb6f..3dce9655fb8 100644 --- a/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json +++ b/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json @@ -164,6 +164,24 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "gasPayingToken", + "outputs": [ + { + "internalType": "address", + "name": "addr_", + "type": "address" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -177,6 +195,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "isCustomGasToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "l1CrossDomainMessenger", diff --git a/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json b/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json index 74a2ae477d9..03c74a86b1a 100644 --- a/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json +++ b/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json @@ -274,6 +274,24 @@ "stateMutability": "payable", "type": "function" }, + { + "inputs": [], + "name": "gasPayingToken", + "outputs": [ + { + "internalType": "address", + "name": "addr_", + "type": "address" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -287,6 +305,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "isCustomGasToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "l1TokenBridge", diff --git a/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json b/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json index 73726a91ab8..faf3ced2850 100644 --- a/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json +++ b/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json @@ -8,6 +8,57 @@ "stateMutability": "payable", "type": "receive" }, + { + "inputs": [], + "name": "balance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_mint", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_value", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "_gasLimit", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "_isCreation", + "type": "bool" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "name": "depositERC20Transaction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -112,6 +163,24 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "gasPayingToken", + "outputs": [ + { + "internalType": "address", + "name": "addr_", + "type": "address" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "guardian", @@ -359,6 +428,34 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "uint8", + "name": "_decimals", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "_name", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "_symbol", + "type": "bytes32" + } + ], + "name": "setGasPayingToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "superchainConfig", @@ -506,6 +603,16 @@ "name": "LargeCalldata", "type": "error" }, + { + "inputs": [], + "name": "NoValue", + "type": "error" + }, + { + "inputs": [], + "name": "OnlyCustomGasToken", + "type": "error" + }, { "inputs": [], "name": "OutOfGas", @@ -515,5 +622,15 @@ "inputs": [], "name": "SmallGasLimit", "type": "error" + }, + { + "inputs": [], + "name": "TransferFailed", + "type": "error" + }, + { + "inputs": [], + "name": "Unauthorized", + "type": "error" } ] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/abi/SystemConfig.json b/packages/contracts-bedrock/snapshots/abi/SystemConfig.json index 21158857959..8c587a0e119 100644 --- a/packages/contracts-bedrock/snapshots/abi/SystemConfig.json +++ b/packages/contracts-bedrock/snapshots/abi/SystemConfig.json @@ -186,6 +186,50 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "gasPayingToken", + "outputs": [ + { + "internalType": "address", + "name": "addr_", + "type": "address" + }, + { + "internalType": "uint8", + "name": "decimals_", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasPayingTokenName", + "outputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasPayingTokenSymbol", + "outputs": [ + { + "internalType": "string", + "name": "symbol_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -291,6 +335,11 @@ "internalType": "address", "name": "optimismMintableERC20Factory", "type": "address" + }, + { + "internalType": "address", + "name": "gasPayingToken", + "type": "address" } ], "internalType": "struct SystemConfig.Addresses", diff --git a/packages/contracts-bedrock/snapshots/abi/WETH.json b/packages/contracts-bedrock/snapshots/abi/WETH.json new file mode 100644 index 00000000000..e3f37af53d6 --- /dev/null +++ b/packages/contracts-bedrock/snapshots/abi/WETH.json @@ -0,0 +1,290 @@ +[ + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "guy", + "type": "address" + }, + { + "internalType": "uint256", + "name": "wad", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "deposit", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "symbol_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "wad", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "wad", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "wad", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "guy", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "wad", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "wad", + "type": "uint256" + } + ], + "name": "Deposit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "wad", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "wad", + "type": "uint256" + } + ], + "name": "Withdrawal", + "type": "event" + } +] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json index 4271dd209bb..0b5beb2a9be 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json @@ -3314,7 +3314,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200191f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615142806200029f6000396000f3fe6080604052600436106101125760003560e01c80638c3152e9116100a5578063a35d99df11610074578063cff0ab9611610059578063cff0ab961461039a578063e965084c1461043b578063e9e05c42146104c757600080fd5b8063a35d99df14610341578063c0c53b8b1461037a57600080fd5b80638c3152e9146102975780639b5f694a146102b75780639bf62d82146102e4578063a14238e71461031157600080fd5b806354fd4d50116100e157806354fd4d50146101fc5780635c975abb146102525780636dbffb78146102775780638b4c40b01461013757600080fd5b806333d7e2bd1461013e57806335e80ab314610195578063452a9320146101c75780634870496f146101dc57600080fd5b36610139576101373334620186a06000604051806020016040528060008152506104d5565b005b600080fd5b34801561014a57600080fd5b5060375461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a157600080fd5b5060355461016b90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156101d357600080fd5b5061016b610692565b3480156101e857600080fd5b506101376101f7366004614709565b61072a565b34801561020857600080fd5b506102456040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161018c919061485b565b34801561025e57600080fd5b50610267610d2d565b604051901515815260200161018c565b34801561028357600080fd5b5061026761029236600461486e565b610dc0565b3480156102a357600080fd5b506101376102b2366004614887565b610e7d565b3480156102c357600080fd5b5060365461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f057600080fd5b5060325461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031d57600080fd5b5061026761032c36600461486e565b60336020526000908152604090205460ff1681565b34801561034d57600080fd5b5061036161035c3660046148e1565b6116b8565b60405167ffffffffffffffff909116815260200161018c565b34801561038657600080fd5b506101376103953660046148fc565b6116d1565b3480156103a657600080fd5b50600154610402906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161018c565b34801561044757600080fd5b5061049961045636600461486e565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff928316602085015291169082015260600161018c565b6101376104d5366004614955565b8260005a90508380156104fd575073ffffffffffffffffffffffffffffffffffffffff871615155b15610534576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61053e83516116b8565b67ffffffffffffffff168567ffffffffffffffff16101561058b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156105c9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146105ea575033731111000000000000000000000000000000001111015b600034888888886040516020016106059594939291906149d2565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610675919061485b565b60405180910390a45050610689828261193b565b50505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614a37565b905090565b610732610d2d565b15610769576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff160361082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190614a74565b5190506108db6108d636869003860186614ad9565b611c12565b8114610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610824565b600061097487611c6e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610a8a5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a869190614a74565b5114155b610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610824565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610bdf9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610bd5888a614b3f565b8a60400135611c9e565b610c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610824565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614bc3565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610e759173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a9190614a74565b602001516fffffffffffffffffffffffffffffffff16611cc2565b92915050565b565b610e85610d2d565b15610ebc576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610824565b6000610f7082611c6e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610824565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec9190614be0565b81602001516fffffffffffffffffffffffffffffffff1610156111b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610824565b6111d681602001516fffffffffffffffffffffffffffffffff16611cc2565b611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610824565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190614a74565b82518151919250146113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610824565b61140c81602001516fffffffffffffffffffffffffffffffff16611cc2565b6114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610824565b60008381526033602052604090205460ff161561155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610824565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516115ff93929190611d68565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061166490841515815260200190565b60405180910390a28015801561167a5750326001145b156116b1576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60006116c5826010614c28565b610e7590615208614c58565b600054610100900460ff16158080156116f15750600054600160ff909116105b8061170b5750303b15801561170b575060005460ff166001145b611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610824565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156117f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010085841602179055603254166118ae57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6118b6611dc6565b801561191957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611971907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614c84565b9050600061197d611ed9565b90506000816020015160ff16826000015163ffffffff1661199e9190614cca565b90508215611ad5576001546000906119d5908390700100000000000000000000000000000000900467ffffffffffffffff16614d32565b90506000836040015160ff16836119ec9190614da6565b600154611a0c9084906fffffffffffffffffffffffffffffffff16614da6565b611a169190614cca565b600154909150600090611a6790611a409084906fffffffffffffffffffffffffffffffff16614e62565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16611f9a565b90506001861115611a9657611a93611a4082876040015160ff1660018a611a8e9190614c84565b611fb9565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611b08908490700100000000000000000000000000000000900467ffffffffffffffff16614c58565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611b95576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090611bc1906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614ed6565b90506000611bd348633b9aca0061200e565b611bdd9083614f13565b905060005a611bec9088614c84565b905080821115611c0857611c08611c038284614c84565b612025565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611c51949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611c51979096959101614f27565b600080611caa86612053565b9050611cb881868686612085565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190614be0565b611d609083614f7e565b421192915050565b6000806000611d788660006120b5565b905080611dae576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff16611e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610824565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003610e7b5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015611f76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614fbb565b6000611faf611fa985856120d3565b836120e3565b90505b9392505050565b6000670de0b6b3a7640000611ffa611fd18583614cca565b611fe390670de0b6b3a7640000614d32565b611ff585670de0b6b3a7640000614da6565b6120f2565b6120049086614da6565b611faf9190614cca565b60008183101561201e5781611fb2565b5090919050565b6000805a90505b825a6120389083614c84565b101561204e576120478261505a565b915061202c565b505050565b6060818051906020012060405160200161206f91815260200190565b6040516020818303038152906040529050919050565b60006120ac84612096878686612123565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561201e5781611fb2565b600081831261201e5781611fb2565b6000611fb2670de0b6b3a76400008361210a86612ba1565b6121149190614da6565b61211e9190614cca565b612de5565b60606000845111612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610824565b600061219b84613024565b905060006121a886613110565b90506000846040516020016121bf91815260200190565b60405160208183030381529060405290506000805b8451811015612b185760008582815181106121f1576121f1615092565b60200260200101519050845183111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610824565b8260000361234557805180516020918201206040516122da926122b492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610824565b61249c565b8051516020116123fb578051805160209182012060405161236f926122b492910190815260200190565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610824565b80518451602080870191909120825191909201201461249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610824565b6124a860106001614f7e565b81602001515103612684578451830361261c576124e281602001516010815181106124d5576124d5615092565b6020026020010151613173565b96506000875111612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610824565b600186516125839190614c84565b8214612611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610824565b505050505050611fb2565b600085848151811061263057612630615092565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061265b5761265b615092565b6020026020010151905061266e816132d3565b955061267b600186614f7e565b94505050612b05565b600281602001515103612a7d57600061269c826132f8565b90506000816000815181106126b3576126b3615092565b016020015160f81c905060006126ca6002836150c1565b6126d59060026150e3565b905060006126e6848360ff1661331c565b905060006126f48a8961331c565b905060006127028383613352565b905080835114612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610824565b60ff8516600214806127a9575060ff85166003145b15612998578082511461283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610824565b61285887602001516001815181106124d5576124d5615092565b9c5060008d51116128eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610824565b60018c516128f99190614c84565b8814612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610824565b505050505050505050505050611fb2565b60ff851615806129ab575060ff85166001145b156129ea576129d787602001516001815181106129ca576129ca615092565b60200260200101516132d3565b99506129e3818a614f7e565b9850612a72565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610824565b505050505050612b05565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610824565b5080612b108161505a565b9150506121d4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610824565b6000808213612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b60006060612c1984613406565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213612e1657506000919050565b680755bf798b4a1bf1e58212612e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610824565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561304257613042614529565b60405190808252806020026020018201604052801561308757816020015b60408051808201909152606080825260208201528152602001906001900390816130605790505b50915060005b818110156131095760405180604001604052808583815181106130b2576130b2615092565b602002602001015181526020016130e18684815181106130d4576130d4615092565b60200260200101516134dc565b8152508382815181106130f6576130f6615092565b602090810291909101015260010161308d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613168578060011b82018184015160001a8060041c8253600f81166001830153505060010161313a565b509295945050505050565b60606000806000613183856134ef565b91945092509050600081600181111561319e5761319e615106565b1461322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610824565b6132358284614f7e565b8551146132c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610824565b6120ac85602001518484613f5c565b606060208260000151106132ef576132ea82613173565b610e75565b610e7582613ff0565b6060610e7561331783602001516000815181106124d5576124d5615092565b613110565b60608251821061333b5750604080516020810190915260008152610e75565b611fb2838384865161334d9190614c84565b614006565b6000808251845110613365578251613368565b83515b90505b80821080156133ef575082828151811061338757613387615092565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106133c6576133c6615092565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156133ff5781600101915061336b565b5092915050565b6000808211613471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610e756134ea836141de565b6142c7565b6000806000808460000151116135ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b6020840151805160001a607f81116135d2576000600160009450945094505050613f55565b60b781116137e05760006135e7608083614c84565b9050808760000151116136a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610824565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061371b57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6137cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610824565b5060019550935060009250613f55915050565b60bf8111613b2e5760006137f560b783614c84565b9050808760000151116138b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610824565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361398e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610824565b613a5c8184614f7e565b895111613b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610824565b613b1c836001614f7e565b9750955060009450613f559350505050565b60f78111613c0f576000613b4360c083614c84565b905080876000015111613bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b600195509350849250613f55915050565b6000613c1c60f783614c84565b905080876000015111613cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610824565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610824565b613e838184614f7e565b895111613f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b613f43836001614f7e565b9750955060019450613f559350505050565b9193909250565b60608167ffffffffffffffff811115613f7757613f77614529565b6040519080825280601f01601f191660200182016040528015613fa1576020820181803683370190505b5090508115611fb2576000613fb68486614f7e565b90506020820160005b84811015613fd7578281015182820152602001613fbf565b84811115613fe6576000858301525b5050509392505050565b6060610e75826020015160008460000151613f5c565b60608182601f011015614075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8282840110156140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8183018451101561414e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610824565b60608215801561416d57604051915060008252602082016040526141d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141a657805183526020928301920161418e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116142a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b50604080518082019091528151815260209182019181019190915290565b606060008060006142d7856134ef565b9194509250905060018160018111156142f2576142f2615106565b1461437f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610824565b845161438b8385614f7e565b14614418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610824565b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161442f5790505093506000835b865181101561451d576000806144a26040518060400160405280858c600001516144869190614c84565b8152602001858c6020015161449b9190614f7e565b90526134ef565b5091509150604051806040016040528083836144be9190614f7e565b8152602001848b602001516144d39190614f7e565b8152508885815181106144e8576144e8615092565b60209081029190910101526144fe600185614f7e565b935061450a8183614f7e565b6145149084614f7e565b9250505061445c565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561459f5761459f614529565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146145c957600080fd5b50565b600082601f8301126145dd57600080fd5b813567ffffffffffffffff8111156145f7576145f7614529565b61462860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614558565b81815284602083860101111561463d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561466c57600080fd5b60405160c0810167ffffffffffffffff828210818311171561469057614690614529565b8160405282935084358352602085013591506146ab826145a7565b816020840152604085013591506146c1826145a7565b816040840152606085013560608401526080850135608084015260a08501359150808211156146ef57600080fd5b506146fc858286016145cc565b60a0830152505092915050565b600080600080600085870360e081121561472257600080fd5b863567ffffffffffffffff8082111561473a57600080fd5b6147468a838b0161465a565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561477f57600080fd5b60408901955060c089013592508083111561479957600080fd5b828901925089601f8401126147ad57600080fd5b82359150808211156147be57600080fd5b508860208260051b84010111156147d457600080fd5b959894975092955050506020019190565b60005b838110156148005781810151838201526020016147e8565b838111156119195750506000910152565b600081518084526148298160208601602086016147e5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fb26020830184614811565b60006020828403121561488057600080fd5b5035919050565b60006020828403121561489957600080fd5b813567ffffffffffffffff8111156148b057600080fd5b6148bc8482850161465a565b949350505050565b803567ffffffffffffffff811681146148dc57600080fd5b919050565b6000602082840312156148f357600080fd5b611fb2826148c4565b60008060006060848603121561491157600080fd5b833561491c816145a7565b9250602084013561492c816145a7565b9150604084013561493c816145a7565b809150509250925092565b80151581146145c957600080fd5b600080600080600060a0868803121561496d57600080fd5b8535614978816145a7565b94506020860135935061498d604087016148c4565b9250606086013561499d81614947565b9150608086013567ffffffffffffffff8111156149b957600080fd5b6149c5888289016145cc565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614a268160498501602087016147e5565b919091016049019695505050505050565b600060208284031215614a4957600080fd5b8151611fb2816145a7565b80516fffffffffffffffffffffffffffffffff811681146148dc57600080fd5b600060608284031215614a8657600080fd5b6040516060810181811067ffffffffffffffff82111715614aa957614aa9614529565b60405282518152614abc60208401614a54565b6020820152614acd60408401614a54565b60408201529392505050565b600060808284031215614aeb57600080fd5b6040516080810181811067ffffffffffffffff82111715614b0e57614b0e614529565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b5a57614b5a614529565b8360051b6020614b6b818301614558565b868152918501918181019036841115614b8357600080fd5b865b84811015614bb757803586811115614b9d5760008081fd5b614ba936828b016145cc565b845250918301918301614b85565b50979650505050505050565b600060208284031215614bd557600080fd5b8151611fb281614947565b600060208284031215614bf257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614c4f57614c4f614bf9565b02949350505050565b600067ffffffffffffffff808316818516808303821115614c7b57614c7b614bf9565b01949350505050565b600082821015614c9657614c96614bf9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614cd957614cd9614c9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614d2d57614d2d614bf9565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614d6c57614d6c614bf9565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614da057614da0614bf9565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614de757614de7614bf9565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614e2257614e22614bf9565b60008712925087820587128484161615614e3e57614e3e614bf9565b87850587128184161615614e5457614e54614bf9565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614e9c57614e9c614bf9565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614ed057614ed0614bf9565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f0e57614f0e614bf9565b500290565b600082614f2257614f22614c9b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f7260c0830184614811565b98975050505050505050565b60008219821115614f9157614f91614bf9565b500190565b805163ffffffff811681146148dc57600080fd5b805160ff811681146148dc57600080fd5b600060c08284031215614fcd57600080fd5b60405160c0810181811067ffffffffffffffff82111715614ff057614ff0614529565b604052614ffc83614f96565b815261500a60208401614faa565b602082015261501b60408401614faa565b604082015261502c60608401614f96565b606082015261503d60808401614f96565b608082015261504e60a08401614a54565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508b5761508b614bf9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806150d4576150d4614c9b565b8060ff84160691505092915050565b600060ff821660ff8416808210156150fd576150fd614bf9565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b620020971760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616011806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615431565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b6366004615565565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156b7565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156ca565b611089565b34801561036257600080fd5b506101936103713660046156f2565b611144565b34801561038257600080fd5b50610193610391366004615738565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156ca565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b366004615775565b611dd6565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611def565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615790565b611e49565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156ca565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157db565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120b3565b50610673828261225f565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615858565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c61252c565b6107bd89826158a0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615858565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a0565b909155506108a890508a8a8a8a8a8a6120b3565b50506108b4828261225f565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158b8565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158f2565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a919061592f565b519050610ba4610b9f36869003860186615994565b612608565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d87612664565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061592f565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a6159fa565b8a60400135612694565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a7e565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061592f565b602001516fffffffffffffffffffffffffffffffff166126b8565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a16201388061275e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156b7565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f982612664565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615858565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126b8565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061592f565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126b8565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127ba565b9150611d1f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cf6576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd89190615858565b9050866060015160386000828254611bf09190615b00565b909155505060408701516060880151611c209173ffffffffffffffffffffffffffffffffffffffff851691612818565b6060870151611c2f9082615b00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190615858565b14611cf4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d1a57611acd8660400151876080015160008960a001516127ba565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8190851515815260200190565b60405180910390a281158015611d975750326001145b15611dce576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611de3826010615b17565b61113e90615208615b47565b600080611dfa6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e41574791505090565b505060385490565b600054610100900460ff1615808015611e695750600054600160ff909116105b80611e835750303b158015611e83575060005460ff166001145b611f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61202e612873565b801561209157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120d5575073ffffffffffffffffffffffffffffffffffffffff861615155b1561210c576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121168151611dd6565b67ffffffffffffffff168367ffffffffffffffff161015612163576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a1576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121c2575033731111000000000000000000000000000000001111015b600086868686866040516020016121dd959493929190615a9b565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161224d91906156b7565b60405180910390a45050505050505050565b600154600090612295907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b00565b905060006122a1612986565b90506000816020015160ff16826000015163ffffffff166122c29190615ba2565b905082156123f9576001546000906122f9908390700100000000000000000000000000000000900467ffffffffffffffff16615c0a565b90506000836040015160ff16836123109190615c7e565b6001546123309084906fffffffffffffffffffffffffffffffff16615c7e565b61233a9190615ba2565b60015490915060009061238b906123649084906fffffffffffffffffffffffffffffffff16615d3a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a47565b905060018611156123ba576123b761236482876040015160ff1660018a6123b29190615b00565b612a66565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061242c908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124b9576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124e5906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615dae565b905060006124f748633b9aca00612abb565b6125019083615deb565b905060005a6125109088615b00565b9050808211156108b4576108b46125278284615b00565b612ad2565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120919085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612afb565b60008160000151826020015183604001518460600151604051602001612647949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612647979096959101615dff565b6000806126a086612c07565b90506126ae81868686612c39565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190615858565b61275690836158a0565b421192915050565b60018054829190601090612791908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127ca866000612c69565b905080612800576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261286e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612586565b505050565b600054610100900460ff1661290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e6a565b6000612a5c612a568585612c87565b83612c97565b90505b9392505050565b6000670de0b6b3a7640000612aa7612a7e8583615ba2565b612a9090670de0b6b3a7640000615c0a565b612aa285670de0b6b3a7640000615c7e565b612ca6565b612ab19086615c7e565b612a5c9190615ba2565b600081831015612acb5781612a5f565b5090919050565b6000805a90505b825a612ae59083615b00565b101561286e57612af482615f0d565b9150612ad9565b6000612b5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cd79092919063ffffffff16565b80519091501561286e5780806020019051810190612b7b9190615a7e565b61286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2391815260200190565b6040516020818303038152906040529050919050565b6000612c6084612c4a878686612ce6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612acb5781612a5f565b6000818312612acb5781612a5f565b6000612a5f670de0b6b3a764000083612cbe86613764565b612cc89190615c7e565b612cd29190615ba2565b6139a8565b6060612a5c8484600085613be7565b60606000845111612d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d5e84613d7d565b90506000612d6b86613e69565b9050600084604051602001612d8291815260200190565b60405160208183030381529060405290506000805b84518110156136db576000858281518110612db457612db4615f45565b602002602001015190508451831115612e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f085780518051602091820120604051612e9d92612e7792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b61305f565b805151602011612fbe5780518051602091820120604051612f3292612e7792910190815260200190565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b80518451602080870191909120825191909201201461305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b61306b601060016158a0565b8160200151510361324757845183036131df576130a5816020015160108151811061309857613098615f45565b6020026020010151613ecc565b96506000875111613138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b600186516131469190615b00565b82146131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a5f565b60008584815181106131f3576131f3615f45565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061321e5761321e615f45565b602002602001015190506132318161402c565b955061323e6001866158a0565b945050506136c8565b60028160200151510361364057600061325f82614051565b905060008160008151811061327657613276615f45565b016020015160f81c9050600061328d600283615f74565b613298906002615f96565b905060006132a9848360ff16614075565b905060006132b78a89614075565b905060006132c583836140ab565b905080835114613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff85166002148061336c575060ff85166003145b1561355b5780825114613401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61341b876020015160018151811061309857613098615f45565b9c5060008d51116134ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134bc9190615b00565b881461354a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a5f565b60ff8516158061356e575060ff85166001145b156135ad5761359a876020015160018151811061358d5761358d615f45565b602002602001015161402c565b99506135a6818a6158a0565b9850613635565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136c8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136d381615f0d565b915050612d97565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137dc8461415f565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139d957506000919050565b680755bf798b4a1bf1e58212613a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d209190615fb9565b60006040518083038185875af1925050503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b5091509150613d72828286614235565b979650505050505050565b80516060908067ffffffffffffffff811115613d9b57613d9b615325565b604051908082528060200260200182016040528015613de057816020015b6040805180820190915260608082526020820152815260200190600190039081613db95790505b50915060005b81811015613e62576040518060400160405280858381518110613e0b57613e0b615f45565b60200260200101518152602001613e3a868481518110613e2d57613e2d615f45565b6020026020010151614288565b815250838281518110613e4f57613e4f615f45565b6020908102919091010152600101613de6565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec1578060011b82018184015160001a8060041c8253600f811660018301535050600101613e93565b509295945050505050565b60606000806000613edc8561429b565b919450925090506000816001811115613ef757613ef7615fd5565b14613f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f8e82846158a0565b85511461401d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6085602001518484614d08565b606060208260000151106140485761404382613ecc565b61113e565b61113e82614d9c565b606061113e614070836020015160008151811061309857613098615f45565b613e69565b606082518210614094575060408051602081019091526000815261113e565b612a5f83838486516140a69190615b00565b614db2565b60008082518451106140be5782516140c1565b83515b90505b808210801561414857508282815181106140e0576140e0615f45565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411f5761411f615f45565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614158578160010191506140c4565b5092915050565b60008082116141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614244575081612a5f565b8251156142545782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156b7565b606061113e61429683614f8a565b615073565b600080600080846000015111614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f811161437e576000600160009450945094505050614d01565b60b7811161458c576000614393608083615b00565b90508087600001511161444e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144c757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d01915050565b60bf81116148da5760006145a160b783615b00565b90508087600001511161465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361473a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c603781116147fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61480881846158a0565b8951116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148c88360016158a0565b9750955060009450614d019350505050565b60f781116149bb5760006148ef60c083615b00565b9050808760000151116149aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d01915050565b60006149c860f783615b00565b905080876000015111614a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c2f81846158a0565b895111614ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cef8360016158a0565b9750955060019450614d019350505050565b9193909250565b60608167ffffffffffffffff811115614d2357614d23615325565b6040519080825280601f01601f191660200182016040528015614d4d576020820181803683370190505b5090508115612a5f576000614d6284866158a0565b90506020820160005b84811015614d83578281015182820152602001614d6b565b84811115614d92576000858301525b5050509392505050565b606061113e826020015160008460000151614d08565b60608182601f011015614e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f195760405191506000825260208201604052614f81565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f52578051835260209283019201614f3a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111615055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b606060008060006150838561429b565b91945092509050600181600181111561509e5761509e615fd5565b1461512b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513783856158a0565b146151c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151db5790505093506000835b86518110156152c95760008061524e6040518060400160405280858c600001516152329190615b00565b8152602001858c6020015161524791906158a0565b905261429b565b50915091506040518060400160405280838361526a91906158a0565b8152602001848b6020015161527f91906158a0565b81525088858151811061529457615294615f45565b60209081029190910101526152aa6001856158a0565b93506152b681836158a0565b6152c090846158a0565b92505050615208565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152f757600080fd5b50565b803567ffffffffffffffff8116811461531257600080fd5b919050565b80151581146152f757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561539b5761539b615325565b604052919050565b600082601f8301126153b457600080fd5b813567ffffffffffffffff8111156153ce576153ce615325565b6153ff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615354565b81815284602083860101111561541457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561544a57600080fd5b8635615455816152d5565b95506020870135945060408701359350615471606088016152fa565b9250608087013561548181615317565b915060a087013567ffffffffffffffff81111561549d57600080fd5b6154a989828a016153a3565b9150509295509295509295565b600060c082840312156154c857600080fd5b60405160c0810167ffffffffffffffff82821081831117156154ec576154ec615325565b816040528293508435835260208501359150615507826152d5565b8160208401526040850135915061551d826152d5565b816040840152606085013560608401526080850135608084015260a085013591508082111561554b57600080fd5b50615558858286016153a3565b60a0830152505092915050565b600080600080600085870360e081121561557e57600080fd5b863567ffffffffffffffff8082111561559657600080fd5b6155a28a838b016154b6565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155db57600080fd5b60408901955060c08901359250808311156155f557600080fd5b828901925089601f84011261560957600080fd5b823591508082111561561a57600080fd5b508860208260051b840101111561563057600080fd5b959894975092955050506020019190565b60005b8381101561565c578181015183820152602001615644565b838111156120915750506000910152565b60008151808452615685816020860160208601615641565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a5f602083018461566d565b6000602082840312156156dc57600080fd5b5035919050565b60ff811681146152f757600080fd5b6000806000806080858703121561570857600080fd5b8435615713816152d5565b93506020850135615723816156e3565b93969395505050506040820135916060013590565b60006020828403121561574a57600080fd5b813567ffffffffffffffff81111561576157600080fd5b61576d848285016154b6565b949350505050565b60006020828403121561578757600080fd5b612a5f826152fa565b6000806000606084860312156157a557600080fd5b83356157b0816152d5565b925060208401356157c0816152d5565b915060408401356157d0816152d5565b809150509250925092565b600080600080600060a086880312156157f357600080fd5b85356157fe816152d5565b945060208601359350615813604087016152fa565b9250606086013561582381615317565b9150608086013567ffffffffffffffff81111561583f57600080fd5b61584b888289016153a3565b9150509295509295909350565b60006020828403121561586a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158b3576158b3615871565b500190565b600080604083850312156158cb57600080fd5b82516158d6816152d5565b60208401519092506158e7816156e3565b809150509250929050565b60006020828403121561590457600080fd5b8151612a5f816152d5565b80516fffffffffffffffffffffffffffffffff8116811461531257600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964615325565b604052825181526159776020840161590f565b60208201526159886040840161590f565b60408201529392505050565b6000608082840312156159a657600080fd5b6040516080810181811067ffffffffffffffff821117156159c9576159c9615325565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1557615a15615325565b8360051b6020615a26818301615354565b868152918501918181019036841115615a3e57600080fd5b865b84811015615a7257803586811115615a585760008081fd5b615a6436828b016153a3565b845250918301918301615a40565b50979650505050505050565b600060208284031215615a9057600080fd5b8151612a5f81615317565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615aef816049850160208701615641565b919091016049019695505050505050565b600082821015615b1257615b12615871565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b3e57615b3e615871565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b6a57615b6a615871565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb157615bb1615b73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0557615c05615871565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4457615c44615871565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c7857615c78615871565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615871565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615871565b60008712925087820587128484161615615d1657615d16615871565b87850587128184161615615d2c57615d2c615871565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7457615d74615871565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615da857615da8615871565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615de657615de6615871565b500290565b600082615dfa57615dfa615b73565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e4a60c083018461566d565b98975050505050505050565b805163ffffffff8116811461531257600080fd5b600060c08284031215615e7c57600080fd5b60405160c0810181811067ffffffffffffffff82111715615e9f57615e9f615325565b604052615eab83615e56565b81526020830151615ebb816156e3565b60208201526040830151615ece816156e3565b6040820152615edf60608401615e56565b6060820152615ef060808401615e56565b6080820152615f0160a0840161590f565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f3e57615f3e615871565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8757615f87615b73565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb057615fb0615871565b90039392505050565b60008251615fcb818460208701615641565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3326,13 +3326,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200191f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615142806200029f6000396000f3fe6080604052600436106101125760003560e01c80638c3152e9116100a5578063a35d99df11610074578063cff0ab9611610059578063cff0ab961461039a578063e965084c1461043b578063e9e05c42146104c757600080fd5b8063a35d99df14610341578063c0c53b8b1461037a57600080fd5b80638c3152e9146102975780639b5f694a146102b75780639bf62d82146102e4578063a14238e71461031157600080fd5b806354fd4d50116100e157806354fd4d50146101fc5780635c975abb146102525780636dbffb78146102775780638b4c40b01461013757600080fd5b806333d7e2bd1461013e57806335e80ab314610195578063452a9320146101c75780634870496f146101dc57600080fd5b36610139576101373334620186a06000604051806020016040528060008152506104d5565b005b600080fd5b34801561014a57600080fd5b5060375461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a157600080fd5b5060355461016b90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156101d357600080fd5b5061016b610692565b3480156101e857600080fd5b506101376101f7366004614709565b61072a565b34801561020857600080fd5b506102456040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161018c919061485b565b34801561025e57600080fd5b50610267610d2d565b604051901515815260200161018c565b34801561028357600080fd5b5061026761029236600461486e565b610dc0565b3480156102a357600080fd5b506101376102b2366004614887565b610e7d565b3480156102c357600080fd5b5060365461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f057600080fd5b5060325461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031d57600080fd5b5061026761032c36600461486e565b60336020526000908152604090205460ff1681565b34801561034d57600080fd5b5061036161035c3660046148e1565b6116b8565b60405167ffffffffffffffff909116815260200161018c565b34801561038657600080fd5b506101376103953660046148fc565b6116d1565b3480156103a657600080fd5b50600154610402906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161018c565b34801561044757600080fd5b5061049961045636600461486e565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff928316602085015291169082015260600161018c565b6101376104d5366004614955565b8260005a90508380156104fd575073ffffffffffffffffffffffffffffffffffffffff871615155b15610534576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61053e83516116b8565b67ffffffffffffffff168567ffffffffffffffff16101561058b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156105c9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146105ea575033731111000000000000000000000000000000001111015b600034888888886040516020016106059594939291906149d2565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610675919061485b565b60405180910390a45050610689828261193b565b50505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614a37565b905090565b610732610d2d565b15610769576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff160361082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190614a74565b5190506108db6108d636869003860186614ad9565b611c12565b8114610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610824565b600061097487611c6e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610a8a5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a869190614a74565b5114155b610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610824565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610bdf9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610bd5888a614b3f565b8a60400135611c9e565b610c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610824565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614bc3565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610e759173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a9190614a74565b602001516fffffffffffffffffffffffffffffffff16611cc2565b92915050565b565b610e85610d2d565b15610ebc576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610824565b6000610f7082611c6e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610824565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec9190614be0565b81602001516fffffffffffffffffffffffffffffffff1610156111b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610824565b6111d681602001516fffffffffffffffffffffffffffffffff16611cc2565b611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610824565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190614a74565b82518151919250146113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610824565b61140c81602001516fffffffffffffffffffffffffffffffff16611cc2565b6114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610824565b60008381526033602052604090205460ff161561155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610824565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516115ff93929190611d68565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061166490841515815260200190565b60405180910390a28015801561167a5750326001145b156116b1576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60006116c5826010614c28565b610e7590615208614c58565b600054610100900460ff16158080156116f15750600054600160ff909116105b8061170b5750303b15801561170b575060005460ff166001145b611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610824565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156117f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010085841602179055603254166118ae57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6118b6611dc6565b801561191957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611971907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614c84565b9050600061197d611ed9565b90506000816020015160ff16826000015163ffffffff1661199e9190614cca565b90508215611ad5576001546000906119d5908390700100000000000000000000000000000000900467ffffffffffffffff16614d32565b90506000836040015160ff16836119ec9190614da6565b600154611a0c9084906fffffffffffffffffffffffffffffffff16614da6565b611a169190614cca565b600154909150600090611a6790611a409084906fffffffffffffffffffffffffffffffff16614e62565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16611f9a565b90506001861115611a9657611a93611a4082876040015160ff1660018a611a8e9190614c84565b611fb9565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611b08908490700100000000000000000000000000000000900467ffffffffffffffff16614c58565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611b95576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090611bc1906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614ed6565b90506000611bd348633b9aca0061200e565b611bdd9083614f13565b905060005a611bec9088614c84565b905080821115611c0857611c08611c038284614c84565b612025565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611c51949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611c51979096959101614f27565b600080611caa86612053565b9050611cb881868686612085565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190614be0565b611d609083614f7e565b421192915050565b6000806000611d788660006120b5565b905080611dae576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff16611e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610824565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003610e7b5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015611f76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614fbb565b6000611faf611fa985856120d3565b836120e3565b90505b9392505050565b6000670de0b6b3a7640000611ffa611fd18583614cca565b611fe390670de0b6b3a7640000614d32565b611ff585670de0b6b3a7640000614da6565b6120f2565b6120049086614da6565b611faf9190614cca565b60008183101561201e5781611fb2565b5090919050565b6000805a90505b825a6120389083614c84565b101561204e576120478261505a565b915061202c565b505050565b6060818051906020012060405160200161206f91815260200190565b6040516020818303038152906040529050919050565b60006120ac84612096878686612123565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561201e5781611fb2565b600081831261201e5781611fb2565b6000611fb2670de0b6b3a76400008361210a86612ba1565b6121149190614da6565b61211e9190614cca565b612de5565b60606000845111612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610824565b600061219b84613024565b905060006121a886613110565b90506000846040516020016121bf91815260200190565b60405160208183030381529060405290506000805b8451811015612b185760008582815181106121f1576121f1615092565b60200260200101519050845183111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610824565b8260000361234557805180516020918201206040516122da926122b492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610824565b61249c565b8051516020116123fb578051805160209182012060405161236f926122b492910190815260200190565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610824565b80518451602080870191909120825191909201201461249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610824565b6124a860106001614f7e565b81602001515103612684578451830361261c576124e281602001516010815181106124d5576124d5615092565b6020026020010151613173565b96506000875111612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610824565b600186516125839190614c84565b8214612611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610824565b505050505050611fb2565b600085848151811061263057612630615092565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061265b5761265b615092565b6020026020010151905061266e816132d3565b955061267b600186614f7e565b94505050612b05565b600281602001515103612a7d57600061269c826132f8565b90506000816000815181106126b3576126b3615092565b016020015160f81c905060006126ca6002836150c1565b6126d59060026150e3565b905060006126e6848360ff1661331c565b905060006126f48a8961331c565b905060006127028383613352565b905080835114612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610824565b60ff8516600214806127a9575060ff85166003145b15612998578082511461283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610824565b61285887602001516001815181106124d5576124d5615092565b9c5060008d51116128eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610824565b60018c516128f99190614c84565b8814612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610824565b505050505050505050505050611fb2565b60ff851615806129ab575060ff85166001145b156129ea576129d787602001516001815181106129ca576129ca615092565b60200260200101516132d3565b99506129e3818a614f7e565b9850612a72565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610824565b505050505050612b05565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610824565b5080612b108161505a565b9150506121d4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610824565b6000808213612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b60006060612c1984613406565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213612e1657506000919050565b680755bf798b4a1bf1e58212612e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610824565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561304257613042614529565b60405190808252806020026020018201604052801561308757816020015b60408051808201909152606080825260208201528152602001906001900390816130605790505b50915060005b818110156131095760405180604001604052808583815181106130b2576130b2615092565b602002602001015181526020016130e18684815181106130d4576130d4615092565b60200260200101516134dc565b8152508382815181106130f6576130f6615092565b602090810291909101015260010161308d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613168578060011b82018184015160001a8060041c8253600f81166001830153505060010161313a565b509295945050505050565b60606000806000613183856134ef565b91945092509050600081600181111561319e5761319e615106565b1461322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610824565b6132358284614f7e565b8551146132c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610824565b6120ac85602001518484613f5c565b606060208260000151106132ef576132ea82613173565b610e75565b610e7582613ff0565b6060610e7561331783602001516000815181106124d5576124d5615092565b613110565b60608251821061333b5750604080516020810190915260008152610e75565b611fb2838384865161334d9190614c84565b614006565b6000808251845110613365578251613368565b83515b90505b80821080156133ef575082828151811061338757613387615092565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106133c6576133c6615092565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156133ff5781600101915061336b565b5092915050565b6000808211613471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610e756134ea836141de565b6142c7565b6000806000808460000151116135ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b6020840151805160001a607f81116135d2576000600160009450945094505050613f55565b60b781116137e05760006135e7608083614c84565b9050808760000151116136a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610824565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061371b57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6137cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610824565b5060019550935060009250613f55915050565b60bf8111613b2e5760006137f560b783614c84565b9050808760000151116138b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610824565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361398e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610824565b613a5c8184614f7e565b895111613b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610824565b613b1c836001614f7e565b9750955060009450613f559350505050565b60f78111613c0f576000613b4360c083614c84565b905080876000015111613bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b600195509350849250613f55915050565b6000613c1c60f783614c84565b905080876000015111613cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610824565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610824565b613e838184614f7e565b895111613f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b613f43836001614f7e565b9750955060019450613f559350505050565b9193909250565b60608167ffffffffffffffff811115613f7757613f77614529565b6040519080825280601f01601f191660200182016040528015613fa1576020820181803683370190505b5090508115611fb2576000613fb68486614f7e565b90506020820160005b84811015613fd7578281015182820152602001613fbf565b84811115613fe6576000858301525b5050509392505050565b6060610e75826020015160008460000151613f5c565b60608182601f011015614075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8282840110156140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8183018451101561414e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610824565b60608215801561416d57604051915060008252602082016040526141d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141a657805183526020928301920161418e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116142a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b50604080518082019091528151815260209182019181019190915290565b606060008060006142d7856134ef565b9194509250905060018160018111156142f2576142f2615106565b1461437f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610824565b845161438b8385614f7e565b14614418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610824565b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161442f5790505093506000835b865181101561451d576000806144a26040518060400160405280858c600001516144869190614c84565b8152602001858c6020015161449b9190614f7e565b90526134ef565b5091509150604051806040016040528083836144be9190614f7e565b8152602001848b602001516144d39190614f7e565b8152508885815181106144e8576144e8615092565b60209081029190910101526144fe600185614f7e565b935061450a8183614f7e565b6145149084614f7e565b9250505061445c565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561459f5761459f614529565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146145c957600080fd5b50565b600082601f8301126145dd57600080fd5b813567ffffffffffffffff8111156145f7576145f7614529565b61462860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614558565b81815284602083860101111561463d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561466c57600080fd5b60405160c0810167ffffffffffffffff828210818311171561469057614690614529565b8160405282935084358352602085013591506146ab826145a7565b816020840152604085013591506146c1826145a7565b816040840152606085013560608401526080850135608084015260a08501359150808211156146ef57600080fd5b506146fc858286016145cc565b60a0830152505092915050565b600080600080600085870360e081121561472257600080fd5b863567ffffffffffffffff8082111561473a57600080fd5b6147468a838b0161465a565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561477f57600080fd5b60408901955060c089013592508083111561479957600080fd5b828901925089601f8401126147ad57600080fd5b82359150808211156147be57600080fd5b508860208260051b84010111156147d457600080fd5b959894975092955050506020019190565b60005b838110156148005781810151838201526020016147e8565b838111156119195750506000910152565b600081518084526148298160208601602086016147e5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fb26020830184614811565b60006020828403121561488057600080fd5b5035919050565b60006020828403121561489957600080fd5b813567ffffffffffffffff8111156148b057600080fd5b6148bc8482850161465a565b949350505050565b803567ffffffffffffffff811681146148dc57600080fd5b919050565b6000602082840312156148f357600080fd5b611fb2826148c4565b60008060006060848603121561491157600080fd5b833561491c816145a7565b9250602084013561492c816145a7565b9150604084013561493c816145a7565b809150509250925092565b80151581146145c957600080fd5b600080600080600060a0868803121561496d57600080fd5b8535614978816145a7565b94506020860135935061498d604087016148c4565b9250606086013561499d81614947565b9150608086013567ffffffffffffffff8111156149b957600080fd5b6149c5888289016145cc565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614a268160498501602087016147e5565b919091016049019695505050505050565b600060208284031215614a4957600080fd5b8151611fb2816145a7565b80516fffffffffffffffffffffffffffffffff811681146148dc57600080fd5b600060608284031215614a8657600080fd5b6040516060810181811067ffffffffffffffff82111715614aa957614aa9614529565b60405282518152614abc60208401614a54565b6020820152614acd60408401614a54565b60408201529392505050565b600060808284031215614aeb57600080fd5b6040516080810181811067ffffffffffffffff82111715614b0e57614b0e614529565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b5a57614b5a614529565b8360051b6020614b6b818301614558565b868152918501918181019036841115614b8357600080fd5b865b84811015614bb757803586811115614b9d5760008081fd5b614ba936828b016145cc565b845250918301918301614b85565b50979650505050505050565b600060208284031215614bd557600080fd5b8151611fb281614947565b600060208284031215614bf257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614c4f57614c4f614bf9565b02949350505050565b600067ffffffffffffffff808316818516808303821115614c7b57614c7b614bf9565b01949350505050565b600082821015614c9657614c96614bf9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614cd957614cd9614c9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614d2d57614d2d614bf9565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614d6c57614d6c614bf9565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614da057614da0614bf9565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614de757614de7614bf9565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614e2257614e22614bf9565b60008712925087820587128484161615614e3e57614e3e614bf9565b87850587128184161615614e5457614e54614bf9565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614e9c57614e9c614bf9565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614ed057614ed0614bf9565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f0e57614f0e614bf9565b500290565b600082614f2257614f22614c9b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f7260c0830184614811565b98975050505050505050565b60008219821115614f9157614f91614bf9565b500190565b805163ffffffff811681146148dc57600080fd5b805160ff811681146148dc57600080fd5b600060c08284031215614fcd57600080fd5b60405160c0810181811067ffffffffffffffff82111715614ff057614ff0614529565b604052614ffc83614f96565b815261500a60208401614faa565b602082015261501b60408401614faa565b604082015261502c60608401614f96565b606082015261503d60808401614f96565b608082015261504e60a08401614a54565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508b5761508b614bf9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806150d4576150d4614c9b565b8060ff84160691505092915050565b600060ff821660ff8416808210156150fd576150fd614bf9565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101125760003560e01c80638c3152e9116100a5578063a35d99df11610074578063cff0ab9611610059578063cff0ab961461039a578063e965084c1461043b578063e9e05c42146104c757600080fd5b8063a35d99df14610341578063c0c53b8b1461037a57600080fd5b80638c3152e9146102975780639b5f694a146102b75780639bf62d82146102e4578063a14238e71461031157600080fd5b806354fd4d50116100e157806354fd4d50146101fc5780635c975abb146102525780636dbffb78146102775780638b4c40b01461013757600080fd5b806333d7e2bd1461013e57806335e80ab314610195578063452a9320146101c75780634870496f146101dc57600080fd5b36610139576101373334620186a06000604051806020016040528060008152506104d5565b005b600080fd5b34801561014a57600080fd5b5060375461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a157600080fd5b5060355461016b90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156101d357600080fd5b5061016b610692565b3480156101e857600080fd5b506101376101f7366004614709565b61072a565b34801561020857600080fd5b506102456040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161018c919061485b565b34801561025e57600080fd5b50610267610d2d565b604051901515815260200161018c565b34801561028357600080fd5b5061026761029236600461486e565b610dc0565b3480156102a357600080fd5b506101376102b2366004614887565b610e7d565b3480156102c357600080fd5b5060365461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f057600080fd5b5060325461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031d57600080fd5b5061026761032c36600461486e565b60336020526000908152604090205460ff1681565b34801561034d57600080fd5b5061036161035c3660046148e1565b6116b8565b60405167ffffffffffffffff909116815260200161018c565b34801561038657600080fd5b506101376103953660046148fc565b6116d1565b3480156103a657600080fd5b50600154610402906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161018c565b34801561044757600080fd5b5061049961045636600461486e565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff928316602085015291169082015260600161018c565b6101376104d5366004614955565b8260005a90508380156104fd575073ffffffffffffffffffffffffffffffffffffffff871615155b15610534576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61053e83516116b8565b67ffffffffffffffff168567ffffffffffffffff16101561058b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156105c9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146105ea575033731111000000000000000000000000000000001111015b600034888888886040516020016106059594939291906149d2565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610675919061485b565b60405180910390a45050610689828261193b565b50505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614a37565b905090565b610732610d2d565b15610769576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff160361082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190614a74565b5190506108db6108d636869003860186614ad9565b611c12565b8114610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610824565b600061097487611c6e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610a8a5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a869190614a74565b5114155b610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610824565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610bdf9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610bd5888a614b3f565b8a60400135611c9e565b610c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610824565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614bc3565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610e759173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a9190614a74565b602001516fffffffffffffffffffffffffffffffff16611cc2565b92915050565b565b610e85610d2d565b15610ebc576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610824565b6000610f7082611c6e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610824565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec9190614be0565b81602001516fffffffffffffffffffffffffffffffff1610156111b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610824565b6111d681602001516fffffffffffffffffffffffffffffffff16611cc2565b611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610824565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190614a74565b82518151919250146113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610824565b61140c81602001516fffffffffffffffffffffffffffffffff16611cc2565b6114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610824565b60008381526033602052604090205460ff161561155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610824565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516115ff93929190611d68565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061166490841515815260200190565b60405180910390a28015801561167a5750326001145b156116b1576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60006116c5826010614c28565b610e7590615208614c58565b600054610100900460ff16158080156116f15750600054600160ff909116105b8061170b5750303b15801561170b575060005460ff166001145b611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610824565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156117f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010085841602179055603254166118ae57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6118b6611dc6565b801561191957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611971907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614c84565b9050600061197d611ed9565b90506000816020015160ff16826000015163ffffffff1661199e9190614cca565b90508215611ad5576001546000906119d5908390700100000000000000000000000000000000900467ffffffffffffffff16614d32565b90506000836040015160ff16836119ec9190614da6565b600154611a0c9084906fffffffffffffffffffffffffffffffff16614da6565b611a169190614cca565b600154909150600090611a6790611a409084906fffffffffffffffffffffffffffffffff16614e62565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16611f9a565b90506001861115611a9657611a93611a4082876040015160ff1660018a611a8e9190614c84565b611fb9565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611b08908490700100000000000000000000000000000000900467ffffffffffffffff16614c58565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611b95576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090611bc1906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614ed6565b90506000611bd348633b9aca0061200e565b611bdd9083614f13565b905060005a611bec9088614c84565b905080821115611c0857611c08611c038284614c84565b612025565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611c51949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611c51979096959101614f27565b600080611caa86612053565b9050611cb881868686612085565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190614be0565b611d609083614f7e565b421192915050565b6000806000611d788660006120b5565b905080611dae576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff16611e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610824565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003610e7b5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015611f76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614fbb565b6000611faf611fa985856120d3565b836120e3565b90505b9392505050565b6000670de0b6b3a7640000611ffa611fd18583614cca565b611fe390670de0b6b3a7640000614d32565b611ff585670de0b6b3a7640000614da6565b6120f2565b6120049086614da6565b611faf9190614cca565b60008183101561201e5781611fb2565b5090919050565b6000805a90505b825a6120389083614c84565b101561204e576120478261505a565b915061202c565b505050565b6060818051906020012060405160200161206f91815260200190565b6040516020818303038152906040529050919050565b60006120ac84612096878686612123565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561201e5781611fb2565b600081831261201e5781611fb2565b6000611fb2670de0b6b3a76400008361210a86612ba1565b6121149190614da6565b61211e9190614cca565b612de5565b60606000845111612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610824565b600061219b84613024565b905060006121a886613110565b90506000846040516020016121bf91815260200190565b60405160208183030381529060405290506000805b8451811015612b185760008582815181106121f1576121f1615092565b60200260200101519050845183111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610824565b8260000361234557805180516020918201206040516122da926122b492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610824565b61249c565b8051516020116123fb578051805160209182012060405161236f926122b492910190815260200190565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610824565b80518451602080870191909120825191909201201461249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610824565b6124a860106001614f7e565b81602001515103612684578451830361261c576124e281602001516010815181106124d5576124d5615092565b6020026020010151613173565b96506000875111612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610824565b600186516125839190614c84565b8214612611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610824565b505050505050611fb2565b600085848151811061263057612630615092565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061265b5761265b615092565b6020026020010151905061266e816132d3565b955061267b600186614f7e565b94505050612b05565b600281602001515103612a7d57600061269c826132f8565b90506000816000815181106126b3576126b3615092565b016020015160f81c905060006126ca6002836150c1565b6126d59060026150e3565b905060006126e6848360ff1661331c565b905060006126f48a8961331c565b905060006127028383613352565b905080835114612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610824565b60ff8516600214806127a9575060ff85166003145b15612998578082511461283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610824565b61285887602001516001815181106124d5576124d5615092565b9c5060008d51116128eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610824565b60018c516128f99190614c84565b8814612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610824565b505050505050505050505050611fb2565b60ff851615806129ab575060ff85166001145b156129ea576129d787602001516001815181106129ca576129ca615092565b60200260200101516132d3565b99506129e3818a614f7e565b9850612a72565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610824565b505050505050612b05565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610824565b5080612b108161505a565b9150506121d4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610824565b6000808213612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b60006060612c1984613406565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213612e1657506000919050565b680755bf798b4a1bf1e58212612e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610824565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561304257613042614529565b60405190808252806020026020018201604052801561308757816020015b60408051808201909152606080825260208201528152602001906001900390816130605790505b50915060005b818110156131095760405180604001604052808583815181106130b2576130b2615092565b602002602001015181526020016130e18684815181106130d4576130d4615092565b60200260200101516134dc565b8152508382815181106130f6576130f6615092565b602090810291909101015260010161308d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613168578060011b82018184015160001a8060041c8253600f81166001830153505060010161313a565b509295945050505050565b60606000806000613183856134ef565b91945092509050600081600181111561319e5761319e615106565b1461322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610824565b6132358284614f7e565b8551146132c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610824565b6120ac85602001518484613f5c565b606060208260000151106132ef576132ea82613173565b610e75565b610e7582613ff0565b6060610e7561331783602001516000815181106124d5576124d5615092565b613110565b60608251821061333b5750604080516020810190915260008152610e75565b611fb2838384865161334d9190614c84565b614006565b6000808251845110613365578251613368565b83515b90505b80821080156133ef575082828151811061338757613387615092565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106133c6576133c6615092565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156133ff5781600101915061336b565b5092915050565b6000808211613471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610e756134ea836141de565b6142c7565b6000806000808460000151116135ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b6020840151805160001a607f81116135d2576000600160009450945094505050613f55565b60b781116137e05760006135e7608083614c84565b9050808760000151116136a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610824565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061371b57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6137cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610824565b5060019550935060009250613f55915050565b60bf8111613b2e5760006137f560b783614c84565b9050808760000151116138b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610824565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361398e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610824565b613a5c8184614f7e565b895111613b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610824565b613b1c836001614f7e565b9750955060009450613f559350505050565b60f78111613c0f576000613b4360c083614c84565b905080876000015111613bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b600195509350849250613f55915050565b6000613c1c60f783614c84565b905080876000015111613cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610824565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610824565b613e838184614f7e565b895111613f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b613f43836001614f7e565b9750955060019450613f559350505050565b9193909250565b60608167ffffffffffffffff811115613f7757613f77614529565b6040519080825280601f01601f191660200182016040528015613fa1576020820181803683370190505b5090508115611fb2576000613fb68486614f7e565b90506020820160005b84811015613fd7578281015182820152602001613fbf565b84811115613fe6576000858301525b5050509392505050565b6060610e75826020015160008460000151613f5c565b60608182601f011015614075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8282840110156140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8183018451101561414e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610824565b60608215801561416d57604051915060008252602082016040526141d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141a657805183526020928301920161418e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116142a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b50604080518082019091528151815260209182019181019190915290565b606060008060006142d7856134ef565b9194509250905060018160018111156142f2576142f2615106565b1461437f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610824565b845161438b8385614f7e565b14614418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610824565b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161442f5790505093506000835b865181101561451d576000806144a26040518060400160405280858c600001516144869190614c84565b8152602001858c6020015161449b9190614f7e565b90526134ef565b5091509150604051806040016040528083836144be9190614f7e565b8152602001848b602001516144d39190614f7e565b8152508885815181106144e8576144e8615092565b60209081029190910101526144fe600185614f7e565b935061450a8183614f7e565b6145149084614f7e565b9250505061445c565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561459f5761459f614529565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146145c957600080fd5b50565b600082601f8301126145dd57600080fd5b813567ffffffffffffffff8111156145f7576145f7614529565b61462860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614558565b81815284602083860101111561463d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561466c57600080fd5b60405160c0810167ffffffffffffffff828210818311171561469057614690614529565b8160405282935084358352602085013591506146ab826145a7565b816020840152604085013591506146c1826145a7565b816040840152606085013560608401526080850135608084015260a08501359150808211156146ef57600080fd5b506146fc858286016145cc565b60a0830152505092915050565b600080600080600085870360e081121561472257600080fd5b863567ffffffffffffffff8082111561473a57600080fd5b6147468a838b0161465a565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561477f57600080fd5b60408901955060c089013592508083111561479957600080fd5b828901925089601f8401126147ad57600080fd5b82359150808211156147be57600080fd5b508860208260051b84010111156147d457600080fd5b959894975092955050506020019190565b60005b838110156148005781810151838201526020016147e8565b838111156119195750506000910152565b600081518084526148298160208601602086016147e5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fb26020830184614811565b60006020828403121561488057600080fd5b5035919050565b60006020828403121561489957600080fd5b813567ffffffffffffffff8111156148b057600080fd5b6148bc8482850161465a565b949350505050565b803567ffffffffffffffff811681146148dc57600080fd5b919050565b6000602082840312156148f357600080fd5b611fb2826148c4565b60008060006060848603121561491157600080fd5b833561491c816145a7565b9250602084013561492c816145a7565b9150604084013561493c816145a7565b809150509250925092565b80151581146145c957600080fd5b600080600080600060a0868803121561496d57600080fd5b8535614978816145a7565b94506020860135935061498d604087016148c4565b9250606086013561499d81614947565b9150608086013567ffffffffffffffff8111156149b957600080fd5b6149c5888289016145cc565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614a268160498501602087016147e5565b919091016049019695505050505050565b600060208284031215614a4957600080fd5b8151611fb2816145a7565b80516fffffffffffffffffffffffffffffffff811681146148dc57600080fd5b600060608284031215614a8657600080fd5b6040516060810181811067ffffffffffffffff82111715614aa957614aa9614529565b60405282518152614abc60208401614a54565b6020820152614acd60408401614a54565b60408201529392505050565b600060808284031215614aeb57600080fd5b6040516080810181811067ffffffffffffffff82111715614b0e57614b0e614529565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b5a57614b5a614529565b8360051b6020614b6b818301614558565b868152918501918181019036841115614b8357600080fd5b865b84811015614bb757803586811115614b9d5760008081fd5b614ba936828b016145cc565b845250918301918301614b85565b50979650505050505050565b600060208284031215614bd557600080fd5b8151611fb281614947565b600060208284031215614bf257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614c4f57614c4f614bf9565b02949350505050565b600067ffffffffffffffff808316818516808303821115614c7b57614c7b614bf9565b01949350505050565b600082821015614c9657614c96614bf9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614cd957614cd9614c9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614d2d57614d2d614bf9565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614d6c57614d6c614bf9565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614da057614da0614bf9565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614de757614de7614bf9565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614e2257614e22614bf9565b60008712925087820587128484161615614e3e57614e3e614bf9565b87850587128184161615614e5457614e54614bf9565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614e9c57614e9c614bf9565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614ed057614ed0614bf9565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f0e57614f0e614bf9565b500290565b600082614f2257614f22614c9b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f7260c0830184614811565b98975050505050505050565b60008219821115614f9157614f91614bf9565b500190565b805163ffffffff811681146148dc57600080fd5b805160ff811681146148dc57600080fd5b600060c08284031215614fcd57600080fd5b60405160c0810181811067ffffffffffffffff82111715614ff057614ff0614529565b604052614ffc83614f96565b815261500a60208401614faa565b602082015261501b60408401614faa565b604082015261502c60608401614f96565b606082015261503d60808401614f96565b608082015261504e60a08401614a54565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508b5761508b614bf9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806150d4576150d4614c9b565b8060ff84160691505092915050565b600060ff821660ff8416808210156150fd576150fd614bf9565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b620020971760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616011806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615431565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b6366004615565565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156b7565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156ca565b611089565b34801561036257600080fd5b506101936103713660046156f2565b611144565b34801561038257600080fd5b50610193610391366004615738565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156ca565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b366004615775565b611dd6565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611def565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615790565b611e49565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156ca565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157db565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120b3565b50610673828261225f565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615858565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c61252c565b6107bd89826158a0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615858565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a0565b909155506108a890508a8a8a8a8a8a6120b3565b50506108b4828261225f565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158b8565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158f2565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a919061592f565b519050610ba4610b9f36869003860186615994565b612608565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d87612664565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061592f565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a6159fa565b8a60400135612694565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a7e565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061592f565b602001516fffffffffffffffffffffffffffffffff166126b8565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a16201388061275e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156b7565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f982612664565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615858565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126b8565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061592f565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126b8565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127ba565b9150611d1f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cf6576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd89190615858565b9050866060015160386000828254611bf09190615b00565b909155505060408701516060880151611c209173ffffffffffffffffffffffffffffffffffffffff851691612818565b6060870151611c2f9082615b00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190615858565b14611cf4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d1a57611acd8660400151876080015160008960a001516127ba565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8190851515815260200190565b60405180910390a281158015611d975750326001145b15611dce576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611de3826010615b17565b61113e90615208615b47565b600080611dfa6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e41574791505090565b505060385490565b600054610100900460ff1615808015611e695750600054600160ff909116105b80611e835750303b158015611e83575060005460ff166001145b611f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61202e612873565b801561209157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120d5575073ffffffffffffffffffffffffffffffffffffffff861615155b1561210c576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121168151611dd6565b67ffffffffffffffff168367ffffffffffffffff161015612163576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a1576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121c2575033731111000000000000000000000000000000001111015b600086868686866040516020016121dd959493929190615a9b565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161224d91906156b7565b60405180910390a45050505050505050565b600154600090612295907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b00565b905060006122a1612986565b90506000816020015160ff16826000015163ffffffff166122c29190615ba2565b905082156123f9576001546000906122f9908390700100000000000000000000000000000000900467ffffffffffffffff16615c0a565b90506000836040015160ff16836123109190615c7e565b6001546123309084906fffffffffffffffffffffffffffffffff16615c7e565b61233a9190615ba2565b60015490915060009061238b906123649084906fffffffffffffffffffffffffffffffff16615d3a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a47565b905060018611156123ba576123b761236482876040015160ff1660018a6123b29190615b00565b612a66565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061242c908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124b9576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124e5906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615dae565b905060006124f748633b9aca00612abb565b6125019083615deb565b905060005a6125109088615b00565b9050808211156108b4576108b46125278284615b00565b612ad2565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120919085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612afb565b60008160000151826020015183604001518460600151604051602001612647949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612647979096959101615dff565b6000806126a086612c07565b90506126ae81868686612c39565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190615858565b61275690836158a0565b421192915050565b60018054829190601090612791908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127ca866000612c69565b905080612800576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261286e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612586565b505050565b600054610100900460ff1661290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e6a565b6000612a5c612a568585612c87565b83612c97565b90505b9392505050565b6000670de0b6b3a7640000612aa7612a7e8583615ba2565b612a9090670de0b6b3a7640000615c0a565b612aa285670de0b6b3a7640000615c7e565b612ca6565b612ab19086615c7e565b612a5c9190615ba2565b600081831015612acb5781612a5f565b5090919050565b6000805a90505b825a612ae59083615b00565b101561286e57612af482615f0d565b9150612ad9565b6000612b5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cd79092919063ffffffff16565b80519091501561286e5780806020019051810190612b7b9190615a7e565b61286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2391815260200190565b6040516020818303038152906040529050919050565b6000612c6084612c4a878686612ce6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612acb5781612a5f565b6000818312612acb5781612a5f565b6000612a5f670de0b6b3a764000083612cbe86613764565b612cc89190615c7e565b612cd29190615ba2565b6139a8565b6060612a5c8484600085613be7565b60606000845111612d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d5e84613d7d565b90506000612d6b86613e69565b9050600084604051602001612d8291815260200190565b60405160208183030381529060405290506000805b84518110156136db576000858281518110612db457612db4615f45565b602002602001015190508451831115612e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f085780518051602091820120604051612e9d92612e7792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b61305f565b805151602011612fbe5780518051602091820120604051612f3292612e7792910190815260200190565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b80518451602080870191909120825191909201201461305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b61306b601060016158a0565b8160200151510361324757845183036131df576130a5816020015160108151811061309857613098615f45565b6020026020010151613ecc565b96506000875111613138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b600186516131469190615b00565b82146131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a5f565b60008584815181106131f3576131f3615f45565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061321e5761321e615f45565b602002602001015190506132318161402c565b955061323e6001866158a0565b945050506136c8565b60028160200151510361364057600061325f82614051565b905060008160008151811061327657613276615f45565b016020015160f81c9050600061328d600283615f74565b613298906002615f96565b905060006132a9848360ff16614075565b905060006132b78a89614075565b905060006132c583836140ab565b905080835114613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff85166002148061336c575060ff85166003145b1561355b5780825114613401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61341b876020015160018151811061309857613098615f45565b9c5060008d51116134ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134bc9190615b00565b881461354a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a5f565b60ff8516158061356e575060ff85166001145b156135ad5761359a876020015160018151811061358d5761358d615f45565b602002602001015161402c565b99506135a6818a6158a0565b9850613635565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136c8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136d381615f0d565b915050612d97565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137dc8461415f565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139d957506000919050565b680755bf798b4a1bf1e58212613a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d209190615fb9565b60006040518083038185875af1925050503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b5091509150613d72828286614235565b979650505050505050565b80516060908067ffffffffffffffff811115613d9b57613d9b615325565b604051908082528060200260200182016040528015613de057816020015b6040805180820190915260608082526020820152815260200190600190039081613db95790505b50915060005b81811015613e62576040518060400160405280858381518110613e0b57613e0b615f45565b60200260200101518152602001613e3a868481518110613e2d57613e2d615f45565b6020026020010151614288565b815250838281518110613e4f57613e4f615f45565b6020908102919091010152600101613de6565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec1578060011b82018184015160001a8060041c8253600f811660018301535050600101613e93565b509295945050505050565b60606000806000613edc8561429b565b919450925090506000816001811115613ef757613ef7615fd5565b14613f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f8e82846158a0565b85511461401d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6085602001518484614d08565b606060208260000151106140485761404382613ecc565b61113e565b61113e82614d9c565b606061113e614070836020015160008151811061309857613098615f45565b613e69565b606082518210614094575060408051602081019091526000815261113e565b612a5f83838486516140a69190615b00565b614db2565b60008082518451106140be5782516140c1565b83515b90505b808210801561414857508282815181106140e0576140e0615f45565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411f5761411f615f45565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614158578160010191506140c4565b5092915050565b60008082116141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614244575081612a5f565b8251156142545782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156b7565b606061113e61429683614f8a565b615073565b600080600080846000015111614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f811161437e576000600160009450945094505050614d01565b60b7811161458c576000614393608083615b00565b90508087600001511161444e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144c757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d01915050565b60bf81116148da5760006145a160b783615b00565b90508087600001511161465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361473a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c603781116147fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61480881846158a0565b8951116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148c88360016158a0565b9750955060009450614d019350505050565b60f781116149bb5760006148ef60c083615b00565b9050808760000151116149aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d01915050565b60006149c860f783615b00565b905080876000015111614a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c2f81846158a0565b895111614ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cef8360016158a0565b9750955060019450614d019350505050565b9193909250565b60608167ffffffffffffffff811115614d2357614d23615325565b6040519080825280601f01601f191660200182016040528015614d4d576020820181803683370190505b5090508115612a5f576000614d6284866158a0565b90506020820160005b84811015614d83578281015182820152602001614d6b565b84811115614d92576000858301525b5050509392505050565b606061113e826020015160008460000151614d08565b60608182601f011015614e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f195760405191506000825260208201604052614f81565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f52578051835260209283019201614f3a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111615055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b606060008060006150838561429b565b91945092509050600181600181111561509e5761509e615fd5565b1461512b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513783856158a0565b146151c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151db5790505093506000835b86518110156152c95760008061524e6040518060400160405280858c600001516152329190615b00565b8152602001858c6020015161524791906158a0565b905261429b565b50915091506040518060400160405280838361526a91906158a0565b8152602001848b6020015161527f91906158a0565b81525088858151811061529457615294615f45565b60209081029190910101526152aa6001856158a0565b93506152b681836158a0565b6152c090846158a0565b92505050615208565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152f757600080fd5b50565b803567ffffffffffffffff8116811461531257600080fd5b919050565b80151581146152f757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561539b5761539b615325565b604052919050565b600082601f8301126153b457600080fd5b813567ffffffffffffffff8111156153ce576153ce615325565b6153ff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615354565b81815284602083860101111561541457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561544a57600080fd5b8635615455816152d5565b95506020870135945060408701359350615471606088016152fa565b9250608087013561548181615317565b915060a087013567ffffffffffffffff81111561549d57600080fd5b6154a989828a016153a3565b9150509295509295509295565b600060c082840312156154c857600080fd5b60405160c0810167ffffffffffffffff82821081831117156154ec576154ec615325565b816040528293508435835260208501359150615507826152d5565b8160208401526040850135915061551d826152d5565b816040840152606085013560608401526080850135608084015260a085013591508082111561554b57600080fd5b50615558858286016153a3565b60a0830152505092915050565b600080600080600085870360e081121561557e57600080fd5b863567ffffffffffffffff8082111561559657600080fd5b6155a28a838b016154b6565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155db57600080fd5b60408901955060c08901359250808311156155f557600080fd5b828901925089601f84011261560957600080fd5b823591508082111561561a57600080fd5b508860208260051b840101111561563057600080fd5b959894975092955050506020019190565b60005b8381101561565c578181015183820152602001615644565b838111156120915750506000910152565b60008151808452615685816020860160208601615641565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a5f602083018461566d565b6000602082840312156156dc57600080fd5b5035919050565b60ff811681146152f757600080fd5b6000806000806080858703121561570857600080fd5b8435615713816152d5565b93506020850135615723816156e3565b93969395505050506040820135916060013590565b60006020828403121561574a57600080fd5b813567ffffffffffffffff81111561576157600080fd5b61576d848285016154b6565b949350505050565b60006020828403121561578757600080fd5b612a5f826152fa565b6000806000606084860312156157a557600080fd5b83356157b0816152d5565b925060208401356157c0816152d5565b915060408401356157d0816152d5565b809150509250925092565b600080600080600060a086880312156157f357600080fd5b85356157fe816152d5565b945060208601359350615813604087016152fa565b9250606086013561582381615317565b9150608086013567ffffffffffffffff81111561583f57600080fd5b61584b888289016153a3565b9150509295509295909350565b60006020828403121561586a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158b3576158b3615871565b500190565b600080604083850312156158cb57600080fd5b82516158d6816152d5565b60208401519092506158e7816156e3565b809150509250929050565b60006020828403121561590457600080fd5b8151612a5f816152d5565b80516fffffffffffffffffffffffffffffffff8116811461531257600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964615325565b604052825181526159776020840161590f565b60208201526159886040840161590f565b60408201529392505050565b6000608082840312156159a657600080fd5b6040516080810181811067ffffffffffffffff821117156159c9576159c9615325565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1557615a15615325565b8360051b6020615a26818301615354565b868152918501918181019036841115615a3e57600080fd5b865b84811015615a7257803586811115615a585760008081fd5b615a6436828b016153a3565b845250918301918301615a40565b50979650505050505050565b600060208284031215615a9057600080fd5b8151612a5f81615317565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615aef816049850160208701615641565b919091016049019695505050505050565b600082821015615b1257615b12615871565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b3e57615b3e615871565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b6a57615b6a615871565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb157615bb1615b73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0557615c05615871565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4457615c44615871565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c7857615c78615871565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615871565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615871565b60008712925087820587128484161615615d1657615d16615871565b87850587128184161615615d2c57615d2c615871565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7457615d74615871565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615da857615da8615871565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615de657615de6615871565b500290565b600082615dfa57615dfa615b73565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e4a60c083018461566d565b98975050505050505050565b805163ffffffff8116811461531257600080fd5b600060c08284031215615e7c57600080fd5b60405160c0810181811067ffffffffffffffff82111715615e9f57615e9f615325565b604052615eab83615e56565b81526020830151615ebb816156e3565b60208201526040830151615ece816156e3565b6040820152615edf60608401615e56565b6060820152615ef060808401615e56565b6080820152615f0160a0840161590f565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f3e57615f3e615871565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8757615f87615b73565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb057615fb0615871565b90039392505050565b60008251615fcb818460208701615641565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "deployedCode": "0x60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615431565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b6366004615565565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156b7565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156ca565b611089565b34801561036257600080fd5b506101936103713660046156f2565b611144565b34801561038257600080fd5b50610193610391366004615738565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156ca565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b366004615775565b611dd6565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611def565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615790565b611e49565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156ca565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157db565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120b3565b50610673828261225f565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615858565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c61252c565b6107bd89826158a0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615858565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a0565b909155506108a890508a8a8a8a8a8a6120b3565b50506108b4828261225f565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158b8565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158f2565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a919061592f565b519050610ba4610b9f36869003860186615994565b612608565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d87612664565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061592f565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a6159fa565b8a60400135612694565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a7e565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061592f565b602001516fffffffffffffffffffffffffffffffff166126b8565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a16201388061275e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156b7565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f982612664565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615858565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126b8565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061592f565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126b8565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127ba565b9150611d1f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cf6576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd89190615858565b9050866060015160386000828254611bf09190615b00565b909155505060408701516060880151611c209173ffffffffffffffffffffffffffffffffffffffff851691612818565b6060870151611c2f9082615b00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190615858565b14611cf4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d1a57611acd8660400151876080015160008960a001516127ba565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8190851515815260200190565b60405180910390a281158015611d975750326001145b15611dce576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611de3826010615b17565b61113e90615208615b47565b600080611dfa6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e41574791505090565b505060385490565b600054610100900460ff1615808015611e695750600054600160ff909116105b80611e835750303b158015611e83575060005460ff166001145b611f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61202e612873565b801561209157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120d5575073ffffffffffffffffffffffffffffffffffffffff861615155b1561210c576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121168151611dd6565b67ffffffffffffffff168367ffffffffffffffff161015612163576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a1576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121c2575033731111000000000000000000000000000000001111015b600086868686866040516020016121dd959493929190615a9b565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161224d91906156b7565b60405180910390a45050505050505050565b600154600090612295907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b00565b905060006122a1612986565b90506000816020015160ff16826000015163ffffffff166122c29190615ba2565b905082156123f9576001546000906122f9908390700100000000000000000000000000000000900467ffffffffffffffff16615c0a565b90506000836040015160ff16836123109190615c7e565b6001546123309084906fffffffffffffffffffffffffffffffff16615c7e565b61233a9190615ba2565b60015490915060009061238b906123649084906fffffffffffffffffffffffffffffffff16615d3a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a47565b905060018611156123ba576123b761236482876040015160ff1660018a6123b29190615b00565b612a66565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061242c908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124b9576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124e5906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615dae565b905060006124f748633b9aca00612abb565b6125019083615deb565b905060005a6125109088615b00565b9050808211156108b4576108b46125278284615b00565b612ad2565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120919085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612afb565b60008160000151826020015183604001518460600151604051602001612647949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612647979096959101615dff565b6000806126a086612c07565b90506126ae81868686612c39565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190615858565b61275690836158a0565b421192915050565b60018054829190601090612791908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127ca866000612c69565b905080612800576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261286e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612586565b505050565b600054610100900460ff1661290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e6a565b6000612a5c612a568585612c87565b83612c97565b90505b9392505050565b6000670de0b6b3a7640000612aa7612a7e8583615ba2565b612a9090670de0b6b3a7640000615c0a565b612aa285670de0b6b3a7640000615c7e565b612ca6565b612ab19086615c7e565b612a5c9190615ba2565b600081831015612acb5781612a5f565b5090919050565b6000805a90505b825a612ae59083615b00565b101561286e57612af482615f0d565b9150612ad9565b6000612b5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cd79092919063ffffffff16565b80519091501561286e5780806020019051810190612b7b9190615a7e565b61286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2391815260200190565b6040516020818303038152906040529050919050565b6000612c6084612c4a878686612ce6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612acb5781612a5f565b6000818312612acb5781612a5f565b6000612a5f670de0b6b3a764000083612cbe86613764565b612cc89190615c7e565b612cd29190615ba2565b6139a8565b6060612a5c8484600085613be7565b60606000845111612d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d5e84613d7d565b90506000612d6b86613e69565b9050600084604051602001612d8291815260200190565b60405160208183030381529060405290506000805b84518110156136db576000858281518110612db457612db4615f45565b602002602001015190508451831115612e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f085780518051602091820120604051612e9d92612e7792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b61305f565b805151602011612fbe5780518051602091820120604051612f3292612e7792910190815260200190565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b80518451602080870191909120825191909201201461305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b61306b601060016158a0565b8160200151510361324757845183036131df576130a5816020015160108151811061309857613098615f45565b6020026020010151613ecc565b96506000875111613138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b600186516131469190615b00565b82146131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a5f565b60008584815181106131f3576131f3615f45565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061321e5761321e615f45565b602002602001015190506132318161402c565b955061323e6001866158a0565b945050506136c8565b60028160200151510361364057600061325f82614051565b905060008160008151811061327657613276615f45565b016020015160f81c9050600061328d600283615f74565b613298906002615f96565b905060006132a9848360ff16614075565b905060006132b78a89614075565b905060006132c583836140ab565b905080835114613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff85166002148061336c575060ff85166003145b1561355b5780825114613401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61341b876020015160018151811061309857613098615f45565b9c5060008d51116134ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134bc9190615b00565b881461354a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a5f565b60ff8516158061356e575060ff85166001145b156135ad5761359a876020015160018151811061358d5761358d615f45565b602002602001015161402c565b99506135a6818a6158a0565b9850613635565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136c8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136d381615f0d565b915050612d97565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137dc8461415f565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139d957506000919050565b680755bf798b4a1bf1e58212613a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d209190615fb9565b60006040518083038185875af1925050503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b5091509150613d72828286614235565b979650505050505050565b80516060908067ffffffffffffffff811115613d9b57613d9b615325565b604051908082528060200260200182016040528015613de057816020015b6040805180820190915260608082526020820152815260200190600190039081613db95790505b50915060005b81811015613e62576040518060400160405280858381518110613e0b57613e0b615f45565b60200260200101518152602001613e3a868481518110613e2d57613e2d615f45565b6020026020010151614288565b815250838281518110613e4f57613e4f615f45565b6020908102919091010152600101613de6565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec1578060011b82018184015160001a8060041c8253600f811660018301535050600101613e93565b509295945050505050565b60606000806000613edc8561429b565b919450925090506000816001811115613ef757613ef7615fd5565b14613f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f8e82846158a0565b85511461401d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6085602001518484614d08565b606060208260000151106140485761404382613ecc565b61113e565b61113e82614d9c565b606061113e614070836020015160008151811061309857613098615f45565b613e69565b606082518210614094575060408051602081019091526000815261113e565b612a5f83838486516140a69190615b00565b614db2565b60008082518451106140be5782516140c1565b83515b90505b808210801561414857508282815181106140e0576140e0615f45565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411f5761411f615f45565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614158578160010191506140c4565b5092915050565b60008082116141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614244575081612a5f565b8251156142545782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156b7565b606061113e61429683614f8a565b615073565b600080600080846000015111614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f811161437e576000600160009450945094505050614d01565b60b7811161458c576000614393608083615b00565b90508087600001511161444e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144c757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d01915050565b60bf81116148da5760006145a160b783615b00565b90508087600001511161465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361473a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c603781116147fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61480881846158a0565b8951116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148c88360016158a0565b9750955060009450614d019350505050565b60f781116149bb5760006148ef60c083615b00565b9050808760000151116149aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d01915050565b60006149c860f783615b00565b905080876000015111614a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c2f81846158a0565b895111614ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cef8360016158a0565b9750955060019450614d019350505050565b9193909250565b60608167ffffffffffffffff811115614d2357614d23615325565b6040519080825280601f01601f191660200182016040528015614d4d576020820181803683370190505b5090508115612a5f576000614d6284866158a0565b90506020820160005b84811015614d83578281015182820152602001614d6b565b84811115614d92576000858301525b5050509392505050565b606061113e826020015160008460000151614d08565b60608182601f011015614e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f195760405191506000825260208201604052614f81565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f52578051835260209283019201614f3a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111615055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b606060008060006150838561429b565b91945092509050600181600181111561509e5761509e615fd5565b1461512b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513783856158a0565b146151c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151db5790505093506000835b86518110156152c95760008061524e6040518060400160405280858c600001516152329190615b00565b8152602001858c6020015161524791906158a0565b905261429b565b50915091506040518060400160405280838361526a91906158a0565b8152602001848b6020015161527f91906158a0565b81525088858151811061529457615294615f45565b60209081029190910101526152aa6001856158a0565b93506152b681836158a0565b6152c090846158a0565b92505050615208565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152f757600080fd5b50565b803567ffffffffffffffff8116811461531257600080fd5b919050565b80151581146152f757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561539b5761539b615325565b604052919050565b600082601f8301126153b457600080fd5b813567ffffffffffffffff8111156153ce576153ce615325565b6153ff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615354565b81815284602083860101111561541457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561544a57600080fd5b8635615455816152d5565b95506020870135945060408701359350615471606088016152fa565b9250608087013561548181615317565b915060a087013567ffffffffffffffff81111561549d57600080fd5b6154a989828a016153a3565b9150509295509295509295565b600060c082840312156154c857600080fd5b60405160c0810167ffffffffffffffff82821081831117156154ec576154ec615325565b816040528293508435835260208501359150615507826152d5565b8160208401526040850135915061551d826152d5565b816040840152606085013560608401526080850135608084015260a085013591508082111561554b57600080fd5b50615558858286016153a3565b60a0830152505092915050565b600080600080600085870360e081121561557e57600080fd5b863567ffffffffffffffff8082111561559657600080fd5b6155a28a838b016154b6565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155db57600080fd5b60408901955060c08901359250808311156155f557600080fd5b828901925089601f84011261560957600080fd5b823591508082111561561a57600080fd5b508860208260051b840101111561563057600080fd5b959894975092955050506020019190565b60005b8381101561565c578181015183820152602001615644565b838111156120915750506000910152565b60008151808452615685816020860160208601615641565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a5f602083018461566d565b6000602082840312156156dc57600080fd5b5035919050565b60ff811681146152f757600080fd5b6000806000806080858703121561570857600080fd5b8435615713816152d5565b93506020850135615723816156e3565b93969395505050506040820135916060013590565b60006020828403121561574a57600080fd5b813567ffffffffffffffff81111561576157600080fd5b61576d848285016154b6565b949350505050565b60006020828403121561578757600080fd5b612a5f826152fa565b6000806000606084860312156157a557600080fd5b83356157b0816152d5565b925060208401356157c0816152d5565b915060408401356157d0816152d5565b809150509250925092565b600080600080600060a086880312156157f357600080fd5b85356157fe816152d5565b945060208601359350615813604087016152fa565b9250606086013561582381615317565b9150608086013567ffffffffffffffff81111561583f57600080fd5b61584b888289016153a3565b9150509295509295909350565b60006020828403121561586a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158b3576158b3615871565b500190565b600080604083850312156158cb57600080fd5b82516158d6816152d5565b60208401519092506158e7816156e3565b809150509250929050565b60006020828403121561590457600080fd5b8151612a5f816152d5565b80516fffffffffffffffffffffffffffffffff8116811461531257600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964615325565b604052825181526159776020840161590f565b60208201526159886040840161590f565b60408201529392505050565b6000608082840312156159a657600080fd5b6040516080810181811067ffffffffffffffff821117156159c9576159c9615325565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1557615a15615325565b8360051b6020615a26818301615354565b868152918501918181019036841115615a3e57600080fd5b865b84811015615a7257803586811115615a585760008081fd5b615a6436828b016153a3565b845250918301918301615a40565b50979650505050505050565b600060208284031215615a9057600080fd5b8151612a5f81615317565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615aef816049850160208701615641565b919091016049019695505050505050565b600082821015615b1257615b12615871565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b3e57615b3e615871565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b6a57615b6a615871565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb157615bb1615b73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0557615c05615871565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4457615c44615871565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c7857615c78615871565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615871565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615871565b60008712925087820587128484161615615d1657615d16615871565b87850587128184161615615d2c57615d2c615871565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7457615d74615871565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615da857615da8615871565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615de657615de6615871565b500290565b600082615dfa57615dfa615b73565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e4a60c083018461566d565b98975050505050505050565b805163ffffffff8116811461531257600080fd5b600060c08284031215615e7c57600080fd5b60405160c0810181811067ffffffffffffffff82111715615e9f57615e9f615325565b604052615eab83615e56565b81526020830151615ebb816156e3565b60208201526040830151615ece816156e3565b6040820152615edf60608401615e56565b6060820152615ef060808401615e56565b6080820152615f0160a0840161590f565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f3e57615f3e615871565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8757615f87615b73565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb057615fb0615871565b90039392505050565b60008251615fcb818460208701615641565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3340,7 +3340,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3348,7 +3348,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3356,7 +3356,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3364,7 +3364,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3372,7 +3372,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3380,7 +3380,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3388,7 +3388,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3396,7 +3396,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3404,7 +3404,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3412,7 +3412,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3420,7 +3420,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3428,7 +3428,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3436,7 +3436,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3444,7 +3444,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3452,7 +3452,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3460,7 +3460,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3468,7 +3468,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3476,7 +3476,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": true, "newValue": "0x000000000000000100000000000000000000000000000000000000003b9aca00", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3484,7 +3484,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3492,7 +3492,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3564,7 +3564,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3578,7 +3578,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3590,7 +3590,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3604,7 +3604,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3616,7 +3616,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3630,7 +3630,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3642,7 +3642,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3656,7 +3656,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -3707,7 +3707,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b506200001f60008062000025565b6200027f565b600054600160a81b900460ff16158080156200004e57506000546001600160a01b90910460ff16105b806200008557506200006b30620001b960201b620014d61760201c565b158015620000855750600054600160a01b900460ff166001145b620000ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011c576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038086166001600160a01b03199283161790925560fc8054928516929091169190911790556200016b734200000000000000000000000000000000000007620001c8565b8015620001b4576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e5565b60cc546001600160a01b03166200025d5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611f94806200028f6000396000f3fe6080604052600436106101805760003560e01c80635c975abb116100d6578063a4e7f8bd1161007f578063d764ad0b11610059578063d764ad0b14610463578063db505d8014610476578063ecc70428146104a357600080fd5b8063a4e7f8bd146103e3578063b1b1b20914610413578063b28ade251461044357600080fd5b806383a74074116100b057806383a74074146103a15780638cbeeef2146102b85780639fce812c146103b857600080fd5b80635c975abb1461033a5780636425666b1461035f5780636e296e451461038c57600080fd5b80633dbb202b116101385780634c1d6a69116101125780634c1d6a69146102b857806354fd4d50146102ce5780635644cfdf1461032457600080fd5b80633dbb202b1461025b5780633f827a5a14610270578063485cc9551461029857600080fd5b80630ff754ea116101695780630ff754ea146101cd5780632828d7e81461021957806335e80ab31461022e57600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561022557600080fd5b5061019a604081565b34801561023a57600080fd5b5060fb546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b61026e610269366004611a22565b610508565b005b34801561027c57600080fd5b50610285600181565b60405161ffff90911681526020016101af565b3480156102a457600080fd5b5061026e6102b3366004611a89565b610765565b3480156102c457600080fd5b5061019a619c4081565b3480156102da57600080fd5b506103176040518060400160405280600581526020017f322e332e3000000000000000000000000000000000000000000000000000000081525081565b6040516101af9190611b2d565b34801561033057600080fd5b5061019a61138881565b34801561034657600080fd5b5061034f6109d3565b60405190151581526020016101af565b34801561036b57600080fd5b5060fc546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039857600080fd5b506101f4610a6c565b3480156103ad57600080fd5b5061019a62030d4081565b3480156103c457600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101f4565b3480156103ef57600080fd5b5061034f6103fe366004611b47565b60ce6020526000908152604090205460ff1681565b34801561041f57600080fd5b5061034f61042e366004611b47565b60cb6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061019a61045e366004611b60565b610b53565b61026e610471366004611bb4565b610bc1565b34801561048257600080fd5b5060cf546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104af57600080fd5b506104fa60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b60cf5461063a9073ffffffffffffffffffffffffffffffffffffffff16610530858585610b53565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061059c60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016105b89796959493929190611c83565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114f2565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856106bf60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516106d1959493929190611ce2565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b6000547501000000000000000000000000000000000000000000900460ff16158080156107b0575060005460017401000000000000000000000000000000000000000090910460ff16105b806107e25750303b1580156107e2575060005474010000000000000000000000000000000000000000900460ff166001145b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156108f957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc80549285169290911691909117905561096b73420000000000000000000000000000000000000761158b565b80156109ce57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190611d30565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f74207365740000000000000000000000606482015260840161086a565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b6f604063ffffffff8816611d81565b610b799190611db1565b610b84601088611d81565b610b919062030d40611dff565b610b9b9190611dff565b610ba59190611dff565b610baf9190611dff565b610bb99190611dff565b949350505050565b610bc96109d3565b15610c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a2070617573656400000000604482015260640161086a565b60f087901c60028110610ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161086a565b8061ffff16600003610de0576000610d3c878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610dde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161086a565b505b6000610e26898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e30611709565b15610e6857853414610e4457610e44611e2b565b600081815260ce602052604090205460ff1615610e6357610e63611e2b565b610fba565b3415610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161086a565b600081815260ce602052604090205460ff16610fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161086a565b610fc3876117e5565b15611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161086a565b600081815260cb602052604090205460ff1615611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161086a565b61113685611127611388619c40611dff565b67ffffffffffffffff1661182b565b158061115c575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561127557600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b50506114cd565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061130688619c405a6112c99190611e5a565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113bc57600082815260cb602052604090205460ff161561135957611359611e2b565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114c9565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611553908890839089906000908990600401611e71565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161086a565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611863565b805190602001209050949350505050565b60006116f68787878787876118fc565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a67575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190611ec9565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611825575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60608484848460405160240161187c9493929190611ee6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161191996959493929190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119bd57600080fd5b50565b60008083601f8401126119d257600080fd5b50813567ffffffffffffffff8111156119ea57600080fd5b602083019150836020828501011115611a0257600080fd5b9250929050565b803563ffffffff81168114611a1d57600080fd5b919050565b60008060008060608587031215611a3857600080fd5b8435611a438161199b565b9350602085013567ffffffffffffffff811115611a5f57600080fd5b611a6b878288016119c0565b9094509250611a7e905060408601611a09565b905092959194509250565b60008060408385031215611a9c57600080fd5b8235611aa78161199b565b91506020830135611ab78161199b565b809150509250929050565b6000815180845260005b81811015611ae857602081850181015186830182015201611acc565b81811115611afa576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b406020830184611ac2565b9392505050565b600060208284031215611b5957600080fd5b5035919050565b600080600060408486031215611b7557600080fd5b833567ffffffffffffffff811115611b8c57600080fd5b611b98868287016119c0565b9094509250611bab905060208501611a09565b90509250925092565b600080600080600080600060c0888a031215611bcf57600080fd5b873596506020880135611be18161199b565b95506040880135611bf18161199b565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611c1b57600080fd5b611c278a828b016119c0565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611cd560c083018486611c3a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611d12608083018688611c3a565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611d4257600080fd5b81518015158114611b4057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611da857611da8611d52565b02949350505050565b600067ffffffffffffffff80841680611df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611e2257611e22611d52565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611e6c57611e6c611d52565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611ebe60a0830184611ac2565b979650505050505050565b600060208284031215611edb57600080fd5b8151611b408161199b565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611f1f6080830185611ac2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611f7b60c0830184611ac2565b9897505050505050505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3719,13 +3719,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b506200001f60008062000025565b6200027f565b600054600160a81b900460ff16158080156200004e57506000546001600160a01b90910460ff16105b806200008557506200006b30620001b960201b620014d61760201c565b158015620000855750600054600160a01b900460ff166001145b620000ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011c576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038086166001600160a01b03199283161790925560fc8054928516929091169190911790556200016b734200000000000000000000000000000000000007620001c8565b8015620001b4576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e5565b60cc546001600160a01b03166200025d5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611f94806200028f6000396000f3fe6080604052600436106101805760003560e01c80635c975abb116100d6578063a4e7f8bd1161007f578063d764ad0b11610059578063d764ad0b14610463578063db505d8014610476578063ecc70428146104a357600080fd5b8063a4e7f8bd146103e3578063b1b1b20914610413578063b28ade251461044357600080fd5b806383a74074116100b057806383a74074146103a15780638cbeeef2146102b85780639fce812c146103b857600080fd5b80635c975abb1461033a5780636425666b1461035f5780636e296e451461038c57600080fd5b80633dbb202b116101385780634c1d6a69116101125780634c1d6a69146102b857806354fd4d50146102ce5780635644cfdf1461032457600080fd5b80633dbb202b1461025b5780633f827a5a14610270578063485cc9551461029857600080fd5b80630ff754ea116101695780630ff754ea146101cd5780632828d7e81461021957806335e80ab31461022e57600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561022557600080fd5b5061019a604081565b34801561023a57600080fd5b5060fb546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b61026e610269366004611a22565b610508565b005b34801561027c57600080fd5b50610285600181565b60405161ffff90911681526020016101af565b3480156102a457600080fd5b5061026e6102b3366004611a89565b610765565b3480156102c457600080fd5b5061019a619c4081565b3480156102da57600080fd5b506103176040518060400160405280600581526020017f322e332e3000000000000000000000000000000000000000000000000000000081525081565b6040516101af9190611b2d565b34801561033057600080fd5b5061019a61138881565b34801561034657600080fd5b5061034f6109d3565b60405190151581526020016101af565b34801561036b57600080fd5b5060fc546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039857600080fd5b506101f4610a6c565b3480156103ad57600080fd5b5061019a62030d4081565b3480156103c457600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101f4565b3480156103ef57600080fd5b5061034f6103fe366004611b47565b60ce6020526000908152604090205460ff1681565b34801561041f57600080fd5b5061034f61042e366004611b47565b60cb6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061019a61045e366004611b60565b610b53565b61026e610471366004611bb4565b610bc1565b34801561048257600080fd5b5060cf546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104af57600080fd5b506104fa60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b60cf5461063a9073ffffffffffffffffffffffffffffffffffffffff16610530858585610b53565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061059c60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016105b89796959493929190611c83565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114f2565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856106bf60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516106d1959493929190611ce2565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b6000547501000000000000000000000000000000000000000000900460ff16158080156107b0575060005460017401000000000000000000000000000000000000000090910460ff16105b806107e25750303b1580156107e2575060005474010000000000000000000000000000000000000000900460ff166001145b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156108f957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc80549285169290911691909117905561096b73420000000000000000000000000000000000000761158b565b80156109ce57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190611d30565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f74207365740000000000000000000000606482015260840161086a565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b6f604063ffffffff8816611d81565b610b799190611db1565b610b84601088611d81565b610b919062030d40611dff565b610b9b9190611dff565b610ba59190611dff565b610baf9190611dff565b610bb99190611dff565b949350505050565b610bc96109d3565b15610c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a2070617573656400000000604482015260640161086a565b60f087901c60028110610ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161086a565b8061ffff16600003610de0576000610d3c878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610dde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161086a565b505b6000610e26898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e30611709565b15610e6857853414610e4457610e44611e2b565b600081815260ce602052604090205460ff1615610e6357610e63611e2b565b610fba565b3415610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161086a565b600081815260ce602052604090205460ff16610fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161086a565b610fc3876117e5565b15611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161086a565b600081815260cb602052604090205460ff1615611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161086a565b61113685611127611388619c40611dff565b67ffffffffffffffff1661182b565b158061115c575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561127557600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b50506114cd565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061130688619c405a6112c99190611e5a565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113bc57600082815260cb602052604090205460ff161561135957611359611e2b565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114c9565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611553908890839089906000908990600401611e71565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161086a565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611863565b805190602001209050949350505050565b60006116f68787878787876118fc565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a67575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190611ec9565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611825575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60608484848460405160240161187c9493929190611ee6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161191996959493929190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119bd57600080fd5b50565b60008083601f8401126119d257600080fd5b50813567ffffffffffffffff8111156119ea57600080fd5b602083019150836020828501011115611a0257600080fd5b9250929050565b803563ffffffff81168114611a1d57600080fd5b919050565b60008060008060608587031215611a3857600080fd5b8435611a438161199b565b9350602085013567ffffffffffffffff811115611a5f57600080fd5b611a6b878288016119c0565b9094509250611a7e905060408601611a09565b905092959194509250565b60008060408385031215611a9c57600080fd5b8235611aa78161199b565b91506020830135611ab78161199b565b809150509250929050565b6000815180845260005b81811015611ae857602081850181015186830182015201611acc565b81811115611afa576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b406020830184611ac2565b9392505050565b600060208284031215611b5957600080fd5b5035919050565b600080600060408486031215611b7557600080fd5b833567ffffffffffffffff811115611b8c57600080fd5b611b98868287016119c0565b9094509250611bab905060208501611a09565b90509250925092565b600080600080600080600060c0888a031215611bcf57600080fd5b873596506020880135611be18161199b565b95506040880135611bf18161199b565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611c1b57600080fd5b611c278a828b016119c0565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611cd560c083018486611c3a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611d12608083018688611c3a565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611d4257600080fd5b81518015158114611b4057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611da857611da8611d52565b02949350505050565b600067ffffffffffffffff80841680611df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611e2257611e22611d52565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611e6c57611e6c611d52565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611ebe60a0830184611ac2565b979650505050505050565b600060208284031215611edb57600080fd5b8151611b408161199b565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611f1f6080830185611ac2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611f7b60c0830184611ac2565b9897505050505050505056fea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101805760003560e01c80635c975abb116100d6578063a4e7f8bd1161007f578063d764ad0b11610059578063d764ad0b14610463578063db505d8014610476578063ecc70428146104a357600080fd5b8063a4e7f8bd146103e3578063b1b1b20914610413578063b28ade251461044357600080fd5b806383a74074116100b057806383a74074146103a15780638cbeeef2146102b85780639fce812c146103b857600080fd5b80635c975abb1461033a5780636425666b1461035f5780636e296e451461038c57600080fd5b80633dbb202b116101385780634c1d6a69116101125780634c1d6a69146102b857806354fd4d50146102ce5780635644cfdf1461032457600080fd5b80633dbb202b1461025b5780633f827a5a14610270578063485cc9551461029857600080fd5b80630ff754ea116101695780630ff754ea146101cd5780632828d7e81461021957806335e80ab31461022e57600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561022557600080fd5b5061019a604081565b34801561023a57600080fd5b5060fb546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b61026e610269366004611a22565b610508565b005b34801561027c57600080fd5b50610285600181565b60405161ffff90911681526020016101af565b3480156102a457600080fd5b5061026e6102b3366004611a89565b610765565b3480156102c457600080fd5b5061019a619c4081565b3480156102da57600080fd5b506103176040518060400160405280600581526020017f322e332e3000000000000000000000000000000000000000000000000000000081525081565b6040516101af9190611b2d565b34801561033057600080fd5b5061019a61138881565b34801561034657600080fd5b5061034f6109d3565b60405190151581526020016101af565b34801561036b57600080fd5b5060fc546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039857600080fd5b506101f4610a6c565b3480156103ad57600080fd5b5061019a62030d4081565b3480156103c457600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101f4565b3480156103ef57600080fd5b5061034f6103fe366004611b47565b60ce6020526000908152604090205460ff1681565b34801561041f57600080fd5b5061034f61042e366004611b47565b60cb6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061019a61045e366004611b60565b610b53565b61026e610471366004611bb4565b610bc1565b34801561048257600080fd5b5060cf546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104af57600080fd5b506104fa60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b60cf5461063a9073ffffffffffffffffffffffffffffffffffffffff16610530858585610b53565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061059c60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016105b89796959493929190611c83565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114f2565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856106bf60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516106d1959493929190611ce2565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b6000547501000000000000000000000000000000000000000000900460ff16158080156107b0575060005460017401000000000000000000000000000000000000000090910460ff16105b806107e25750303b1580156107e2575060005474010000000000000000000000000000000000000000900460ff166001145b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156108f957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc80549285169290911691909117905561096b73420000000000000000000000000000000000000761158b565b80156109ce57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190611d30565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f74207365740000000000000000000000606482015260840161086a565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b6f604063ffffffff8816611d81565b610b799190611db1565b610b84601088611d81565b610b919062030d40611dff565b610b9b9190611dff565b610ba59190611dff565b610baf9190611dff565b610bb99190611dff565b949350505050565b610bc96109d3565b15610c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a2070617573656400000000604482015260640161086a565b60f087901c60028110610ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161086a565b8061ffff16600003610de0576000610d3c878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610dde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161086a565b505b6000610e26898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e30611709565b15610e6857853414610e4457610e44611e2b565b600081815260ce602052604090205460ff1615610e6357610e63611e2b565b610fba565b3415610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161086a565b600081815260ce602052604090205460ff16610fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161086a565b610fc3876117e5565b15611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161086a565b600081815260cb602052604090205460ff1615611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161086a565b61113685611127611388619c40611dff565b67ffffffffffffffff1661182b565b158061115c575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561127557600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b50506114cd565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061130688619c405a6112c99190611e5a565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113bc57600082815260cb602052604090205460ff161561135957611359611e2b565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114c9565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611553908890839089906000908990600401611e71565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161086a565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611863565b805190602001209050949350505050565b60006116f68787878787876118fc565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a67575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190611ec9565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611825575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60608484848460405160240161187c9493929190611ee6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161191996959493929190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119bd57600080fd5b50565b60008083601f8401126119d257600080fd5b50813567ffffffffffffffff8111156119ea57600080fd5b602083019150836020828501011115611a0257600080fd5b9250929050565b803563ffffffff81168114611a1d57600080fd5b919050565b60008060008060608587031215611a3857600080fd5b8435611a438161199b565b9350602085013567ffffffffffffffff811115611a5f57600080fd5b611a6b878288016119c0565b9094509250611a7e905060408601611a09565b905092959194509250565b60008060408385031215611a9c57600080fd5b8235611aa78161199b565b91506020830135611ab78161199b565b809150509250929050565b6000815180845260005b81811015611ae857602081850181015186830182015201611acc565b81811115611afa576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b406020830184611ac2565b9392505050565b600060208284031215611b5957600080fd5b5035919050565b600080600060408486031215611b7557600080fd5b833567ffffffffffffffff811115611b8c57600080fd5b611b98868287016119c0565b9094509250611bab905060208501611a09565b90509250925092565b600080600080600080600060c0888a031215611bcf57600080fd5b873596506020880135611be18161199b565b95506040880135611bf18161199b565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611c1b57600080fd5b611c278a828b016119c0565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611cd560c083018486611c3a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611d12608083018688611c3a565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611d4257600080fd5b81518015158114611b4057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611da857611da8611d52565b02949350505050565b600067ffffffffffffffff80841680611df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611e2257611e22611d52565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611e6c57611e6c611d52565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611ebe60a0830184611ac2565b979650505050505050565b600060208284031215611edb57600080fd5b8151611b408161199b565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611f1f6080830185611ac2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611f7b60c0830184611ac2565b9897505050505050505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", + "deployedCode": "0x6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3733,7 +3733,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3741,7 +3741,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3749,7 +3749,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3757,7 +3757,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3765,7 +3765,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -3773,7 +3773,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": true, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -3781,7 +3781,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3789,7 +3789,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3797,7 +3797,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3805,7 +3805,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3813,7 +3813,23 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "isWrite": false, + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "reverted": false, + "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" + }, + { + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "isWrite": true, + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "reverted": false, + "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" + }, + { + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3821,7 +3837,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3829,7 +3845,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3837,7 +3853,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3845,7 +3861,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3853,7 +3869,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3861,7 +3877,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3869,7 +3885,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3898,7 +3914,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3912,7 +3928,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -3924,7 +3940,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3938,7 +3954,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -3950,7 +3966,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3964,7 +3980,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3976,7 +3992,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3990,7 +4006,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4002,7 +4018,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4016,7 +4032,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4601,7 +4617,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b506200004962000032600160008051602062002a4783398151915262000c39565b60001b600019620000c960201b62000e061760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a08088018490528851968701895283875293860183905296850182905284018190529483018590528201849052620000c39361dead9390928392839290918391908290620000cd565b62000d5c565b9055565b600054610100900460ff1615808015620000ee5750600054600160ff909116105b806200011e57506200010b30620004df60201b62000e0a1760201c565b1580156200011e575060005460ff166001145b620001875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001ab576000805461ff0019166101001790555b620001b5620004ee565b620001c08a62000556565b620001cb87620005d5565b620001d7898962000627565b620001e2866200068b565b620002197f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000c960201b62000e061760201c565b6200025f6200024a60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862000c39565b60001b84620000c960201b62000e061760201c565b620002a96200029060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762000c39565b60001b8360000151620000c960201b62000e061760201c565b620002f3620002da60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862000c39565b60001b8360200151620000c960201b62000e061760201c565b6200033d6200032460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762000c39565b60001b8360400151620000c960201b62000e061760201c565b620003876200036e60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762000c39565b60001b8360600151620000c960201b62000e061760201c565b620003d1620003b860017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad62000c39565b60001b8360800151620000c960201b62000e061760201c565b6200041b6200040260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62000c39565b60001b8360a00151620000c960201b62000e061760201c565b6200042562000728565b620004308462000799565b6200043a62000add565b6001600160401b0316866001600160401b031610156200048c5760405162461bcd60e51b815260206004820152601f6024820152600080516020620029e783398151915260448201526064016200017e565b8015620004d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff166200054a5760405162461bcd60e51b815260206004820152602b602482015260008051602062002a2783398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200017e565b6200055462000b0a565b565b6200056062000b71565b6001600160a01b038116620005c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200017e565b620005d28162000bcd565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062002a07833981519152836040516200061b919062000c53565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062002a07833981519152836040516200067e919062000c53565b60405180910390a3505050565b6200069562000add565b6001600160401b0316816001600160401b03161015620006e75760405162461bcd60e51b815260206004820152601f6024820152600080516020620029e783398151915260448201526064016200017e565b606880546001600160401b0319166001600160401b0383169081179091556040805160208082019390935281518082039093018352810190526002620005f9565b6200075c62000748600160008051602062002a4783398151915262000c39565b60001b62000c1f60201b62000e261760201c565b60000362000554576200055462000784600160008051602062002a4783398151915262000c39565b60001b43620000c960201b62000e061760201c565b8060a001516001600160801b0316816060015163ffffffff161115620008285760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016200017e565b6001816040015160ff1611620008995760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b60648201526084016200017e565b606854608082015182516001600160401b0390921691620008bb919062000cab565b63ffffffff161115620009005760405162461bcd60e51b815260206004820152601f6024820152600080516020620029e783398151915260448201526064016200017e565b6000816020015160ff1611620009715760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b60648201526084016200017e565b8051602082015163ffffffff82169160ff909116906200099390829062000cd6565b6200099f919062000d08565b63ffffffff161462000a1a5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016200017e565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000b059063ffffffff6a010000000000000000000082048116911662000d37565b905090565b600054610100900460ff1662000b665760405162461bcd60e51b815260206004820152602b602482015260008051602062002a2783398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200017e565b620005543362000bcd565b6033546001600160a01b03163314620005545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200017e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b634e487b7160e01b600052601160045260246000fd5b60008282101562000c4e5762000c4e62000c23565b500390565b600060208083528351808285015260005b8181101562000c825785810183015185820160400152820162000c64565b8181111562000c95576000604083870101525b50601f01601f1916929092016040019392505050565b600063ffffffff80831681851680830382111562000ccd5762000ccd62000c23565b01949350505050565b600063ffffffff8084168062000cfc57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000d2e5762000d2e62000c23565b02949350505050565b60006001600160401b0382811684821680830382111562000ccd5762000ccd62000c23565b611c7b8062000d6c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063a711986911610145578063e2a3285c116100bd578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610597578063fd32aa0f1461059f578063ffa1ad74146105a757600080fd5b8063f45e65d81461057a578063f68016b71461058357600080fd5b8063e2a3285c1461054e578063e81b2c6d14610556578063f2b4e6171461055f578063f2fde38b1461056757600080fd5b8063c71973f611610114578063cc731b02116100f9578063cc731b021461040a578063dac6e63a1461053e578063e0e2016d1461054657600080fd5b8063c71973f6146103e4578063c9b26f61146103f757600080fd5b8063a7119869146103b9578063b40a817c146103c1578063bc49ce5f146103d4578063c4e8ddfa146103dc57600080fd5b806348cd4cb1116101d85780635d73369c116101a75780638da5cb5b1161018c5780638da5cb5b14610380578063935f029e1461039e5780639b7d7f0a146103b157600080fd5b80635d73369c14610370578063715018a61461037857600080fd5b806348cd4cb1146102d75780634add321d146102df5780634f16540b1461030057806354fd4d501461032757600080fd5b80630c18c162116102145780630c18c162146102ab57806318d13918146102b457806319f5cea8146102c75780631fd19ee1146102cf57600080fd5b806306c9265714610246578063078f29cf146102615780630a49cb031461028e5780630bbb796814610296575b600080fd5b61024e6105af565b6040519081526020015b60405180910390f35b6102696105dd565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610258565b610269610616565b6102a96102a4366004611928565b610646565b005b61024e60655481565b6102a96102c2366004611a55565b610a44565b61024e610a58565b610269610a83565b61024e610aad565b6102e7610add565b60405167ffffffffffffffff9091168152602001610258565b61024e7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103636040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102589190611ae2565b61024e610b03565b6102a9610b2e565b60335473ffffffffffffffffffffffffffffffffffffffff16610269565b6102a96103ac366004611af5565b610b42565b610269610b58565b610269610b88565b6102a96103cf366004611b17565b610bb8565b61024e610bc9565b610269610bf4565b6102a96103f2366004611b32565b610c24565b6102a9610405366004611b4e565b610c35565b6104ce6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102589190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b610269610c46565b61024e610c76565b61024e610ca1565b61024e60675481565b610269610ccc565b6102a9610575366004611a55565b610cfc565b61024e60665481565b6068546102e79067ffffffffffffffff1681565b61024e610db0565b61024e610ddb565b61024e600081565b6105da60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b81565b600061061161060d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b5490565b905090565b600061061161060d60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b600054610100900460ff16158080156106665750600054600160ff909116105b806106805750303b158015610680575060005460ff166001145b610711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561076f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610777610e2a565b6107808a610cfc565b61078987610ec9565b6107938989610f2a565b61079c86610fbb565b6107c57f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6107f86107f360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b849055565b61082c61082660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b83519055565b61086361085a60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b60208401519055565b61089a61089160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b60408401519055565b6108d16108c860017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b60608401519055565b6109086108ff60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b60808401519055565b61093f61093660017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b60a08401519055565b610947611099565b61095084611101565b610958610add565b67ffffffffffffffff168667ffffffffffffffff1610156109d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b8015610a3857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b610a4c611575565b610a55816115f6565b50565b6105da60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b60006106117f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b600061061161060d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b6069546000906106119063ffffffff6a0100000000000000000000820481169116611bad565b6105da60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b610b36611575565b610b40600061167a565b565b610b4a611575565b610b548282610f2a565b5050565b600061061161060d60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b600061061161060d60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b610bc0611575565b610a5581610fbb565b6105da60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b600061061161060d60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b610c2c611575565b610a5581611101565b610c3d611575565b610a5581610ec9565b600061061161060d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b6105da60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b6105da60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b600061061161060d60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b610d04611575565b73ffffffffffffffffffffffffffffffffffffffff8116610da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610708565b610a558161167a565b6105da60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b6105da60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b5490565b600054610100900460ff16610ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610708565b610b406116f1565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610f1e9190611ae2565b60405180910390a35050565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610fae9190611ae2565b60405180910390a3505050565b610fc3610add565b67ffffffffffffffff168167ffffffffffffffff161015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002610eed565b6110c761060d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b600003610b4057610b406110fc60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff1611156111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610708565b6001816040015160ff1611611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610708565b6068546080820151825167ffffffffffffffff909216916112699190611bd9565b63ffffffff1611156112d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b6000816020015160ff161161136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610708565b8051602082015163ffffffff82169160ff9091169061138e908290611bf8565b6113989190611c42565b63ffffffff161461142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610708565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610708565b61161f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506003610eed565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610708565b610b403361167a565b803573ffffffffffffffffffffffffffffffffffffffff811681146117b557600080fd5b919050565b803567ffffffffffffffff811681146117b557600080fd5b60405160c0810167ffffffffffffffff8111828210171561181c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803563ffffffff811681146117b557600080fd5b803560ff811681146117b557600080fd5b600060c0828403121561185957600080fd5b60405160c0810181811067ffffffffffffffff821117156118a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806118b283611822565b81526118c060208401611836565b60208201526118d160408401611836565b60408201526118e260608401611822565b60608201526118f360808401611822565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461191b57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361026081121561194857600080fd5b6119518b611791565b995060208b0135985060408b0135975060608b0135965061197460808c016117ba565b955061198260a08c01611791565b94506119918c60c08d01611847565b93506119a06101808c01611791565b925060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156119d257600080fd5b506119db6117d2565b6119e86101a08c01611791565b81526119f76101c08c01611791565b6020820152611a096101e08c01611791565b6040820152611a1b6102008c01611791565b6060820152611a2d6102208c01611791565b6080820152611a3f6102408c01611791565b60a0820152809150509295985092959850929598565b600060208284031215611a6757600080fd5b611a7082611791565b9392505050565b6000815180845260005b81811015611a9d57602081850181015186830182015201611a81565b81811115611aaf576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a706020830184611a77565b60008060408385031215611b0857600080fd5b50508035926020909101359150565b600060208284031215611b2957600080fd5b611a70826117ba565b600060c08284031215611b4457600080fd5b611a708383611847565b600060208284031215611b6057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611ba857611ba8611b67565b500390565b600067ffffffffffffffff808316818516808303821115611bd057611bd0611b67565b01949350505050565b600063ffffffff808316818516808303821115611bd057611bd0611b67565b600063ffffffff80841680611c36577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615611c6557611c65611b67565b0294935050505056fea164736f6c634300080f000a53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000496200003260016000805160206200382983398151915262001086565b60001b600019620000d160201b62000ed21760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b620012af565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000ed61760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000ed21760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001086565b60001b84620000d160201b62000ed21760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001086565b60001b8360000151620000d160201b62000ed21760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001086565b60001b8360200151620000d160201b62000ed21760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001086565b60001b8360400151620000d160201b62000ed21760201c565b6200038f6200037660017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762001086565b60001b8360600151620000d160201b62000ed21760201c565b620003c8620003af60016000805160206200380983398151915262001086565b60001b8360800151620000d160201b62000ed21760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001086565b60001b8360a00151620000d160201b62000ed21760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a15565b6200044162000d59565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d86565b565b6200056762000ded565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e49565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b6000600080516020620037c983398151915283604051620006229190620010cf565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f19818403018152919052905060016000600080516020620037c983398151915283604051620006859190620010cf565b60405180910390a3505050565b6200069c62000d59565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200382983398151915262001086565b60001b62000e9b60201b620006a41760201c565b6000036200055b576200055b6200078b60016000805160206200382983398151915262001086565b60001b43620000d160201b62000ed21760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000820573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000846919062001104565b60ff1614620008af5760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b60006200092f826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200091e919081019062001146565b62000e9f60201b62000ef21760201c565b9050600062000976836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b905062000992836012848462000f3760201b62000f951760201c565b6200099c62001024565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b158015620009f757600080fd5b505af115801562000a0c573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000aa45760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b155760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b379190620011fe565b63ffffffff16111562000b7c5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b6000816020015160ff161162000bed5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c0f90829062001229565b62000c1b91906200125b565b63ffffffff161462000c965760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d819063ffffffff6a01000000000000000000008204811691166200128a565b905090565b600054610100900460ff1662000de25760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e49565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b600060208251111562000f1b5760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f31826200104660201b620010671760201c565b92915050565b62000f9262000f6860017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec62001086565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000ed21760201c565b62000fd862000fc360017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001086565b60001b83620000d160201b62000ed21760201c565b6200101e6200100960017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001086565b60001b82620000d160201b62000ed21760201c565b50505050565b600062000d816200074f60016000805160206200380983398151915262001086565b8051602181106200105f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b634e487b7160e01b600052601160045260246000fd5b6000828210156200109b576200109b62001070565b500390565b60005b83811015620010bd578181015183820152602001620010a3565b838111156200101e5750506000910152565b6020815260008251806020840152620010f0816040850160208701620010a0565b601f01601f19169190910160400192915050565b6000602082840312156200111757600080fd5b815160ff811681146200112957600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200115957600080fd5b81516001600160401b03808211156200117157600080fd5b818401915084601f8301126200118657600080fd5b8151818111156200119b576200119b62001130565b604051601f8201601f19908116603f01168101908382118183101715620011c657620011c662001130565b81604052828152876020848701011115620011e057600080fd5b620011f3836020830160208801620010a0565b979650505050505050565b600063ffffffff80831681851680830382111562001220576200122062001070565b01949350505050565b600063ffffffff808416806200124f57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562001281576200128162001070565b02949350505050565b60006001600160401b0382811684821680830382111562001220576200122062001070565b6124ea80620012bf6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063a711986911610160578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461062e578063fd32aa0f14610636578063ffa1ad741461063e57600080fd5b8063f45e65d814610611578063f68016b71461061a57600080fd5b8063e81b2c6d116100bd578063e81b2c6d146105ed578063f2b4e617146105f6578063f2fde38b146105fe57600080fd5b8063e0e2016d146105dd578063e2a3285c146105e557600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b0214610499578063d8444715146105cd578063dac6e63a146105d557600080fd5b8063c71973f614610473578063c9b26f611461048657600080fd5b8063a711986914610448578063b40a817c14610450578063bc49ce5f14610463578063c4e8ddfa1461046b57600080fd5b80634add321d1161020e5780635d73369c116101c25780638da5cb5b116101a75780638da5cb5b1461040f578063935f029e1461042d5780639b7d7f0a1461044057600080fd5b80635d73369c146103ff578063715018a61461040757600080fd5b80634f16540b116101f35780634f16540b1461038757806354fd4d50146103ae578063550fcdc9146103f757600080fd5b80634add321d146103535780634c1e843d1461037457600080fd5b806318d13918116102655780631fd19ee11161024a5780631fd19ee11461030d5780634397dfef1461031557806348cd4cb11461034b57600080fd5b806318d13918146102f057806319f5cea81461030557600080fd5b806306c9265714610297578063078f29cf146102b25780630a49cb03146102df5780630c18c162146102e7575b600080fd5b61029f610646565b6040519081526020015b60405180910390f35b6102ba610674565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a9565b6102ba6106ad565b61029f60655481565b6103036102fe366004611f41565b6106dd565b005b61029f6106f1565b6102ba61071c565b61031d610746565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102a9565b61029f61075a565b61035b61078a565b60405167ffffffffffffffff90911681526020016102a9565b6103036103823660046120b4565b6107b0565b61029f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103ea6040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a99190612269565b6103ea610bbb565b61029f610bc5565b610303610bf0565b60335473ffffffffffffffffffffffffffffffffffffffff166102ba565b61030361043b36600461227c565b610c04565b6102ba610c1a565b6102ba610c4a565b61030361045e36600461229e565b610c7a565b61029f610c8b565b6102ba610cb6565b6103036104813660046122b9565b610ce6565b6103036104943660046122d5565b610cf7565b61055d6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102a99190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6103ea610d08565b6102ba610d12565b61029f610d42565b61029f610d6d565b61029f60675481565b6102ba610d98565b61030361060c366004611f41565b610dc8565b61029f60665481565b60685461035b9067ffffffffffffffff1681565b61029f610e7c565b61029f610ea7565b61029f600081565b61067160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b81565b60006106a86106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b5490565b905090565b60006106a86106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b6106e5611090565b6106ee81611111565b50565b61067160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60006106a87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107516111ce565b90939092509050565b60006106a86106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b6069546000906106a89063ffffffff6a0100000000000000000000820481169116612334565b600054610100900460ff16158080156107d05750600054600160ff909116105b806107ea5750303b1580156107ea575060005460ff166001145b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108e161124b565b6108ea8a610dc8565b6108f3876112ea565b6108fd8989611312565b610906866113a3565b61092f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b61096261095d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b849055565b61099661099060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b83519055565b6109cd6109c460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60208401519055565b610a046109fb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b60408401519055565b610a3b610a3260017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60608401519055565b610a72610a6960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b60808401519055565b610aa9610aa060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60a08401519055565b610ab1611481565b610abe8260c001516114e9565b610ac7846117e2565b610acf61078a565b67ffffffffffffffff168667ffffffffffffffff161015610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b8015610baf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106a8611c56565b61067160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610bf8611090565b610c026000611d17565b565b610c0c611090565b610c168282611312565b5050565b60006106a86106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60006106a86106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610c82611090565b6106ee816113a3565b61067160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b60006106a86106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b610cee611090565b6106ee816117e2565b610cff611090565b6106ee816112ea565b60606106a8611d8e565b60006106a86106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b61067160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b61067160017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60006106a86106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b610dd0611090565b73ffffffffffffffffffffffffffffffffffffffff8116610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610872565b6106ee81611d17565b61067160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b61067160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e203332206279746573000000000000000000006064820152608401610872565b610f8f82611067565b92915050565b610ffb610fc360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61102e61102960017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b839055565b61106161105c60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b829055565b50505050565b80516021811061107f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610872565b61113a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516111c29190612269565b60405180910390a35050565b600080806112006106a460017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261123f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b600054610100900460ff166112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c02611e44565b6067819055604080516020808201849052825180830390910181529082019091526000611191565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113969190612269565b60405180910390a3505050565b6113ab61078a565b67ffffffffffffffff168167ffffffffffffffff161015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611191565b6114af6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b600003610c0257610c026114e460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611538575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b156106ee57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190612360565b60ff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e0000000000000000000000000000000000006064820152608401610872565b60006116dc8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116d7919081019061237d565b610ef2565b9050600061172e8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b905061173d8360128484610f95565b6117456106ad565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610872565b6001816040015160ff1611611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610872565b6068546080820151825167ffffffffffffffff9092169161194a9190612448565b63ffffffff1611156119b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b6000816020015160ff1611611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610872565b8051602082015163ffffffff82169160ff90911690611a6f908290612467565b611a7991906124b1565b63ffffffff1614611b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610872565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611c626111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cdb57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b611ee4565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611d9a6111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e1357505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b600054610100900460ff16611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c0233611d17565b60405160005b82811a15611efa57600101611eea565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f3c57600080fd5b919050565b600060208284031215611f5357600080fd5b611f5c82611f18565b9392505050565b803567ffffffffffffffff81168114611f3c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611fcd57611fcd611f7b565b60405290565b803563ffffffff81168114611f3c57600080fd5b60ff811681146106ee57600080fd5b600060c0828403121561200857600080fd5b60405160c0810181811067ffffffffffffffff8211171561202b5761202b611f7b565b60405290508061203a83611fd3565b8152602083013561204a81611fe7565b6020820152604083013561205d81611fe7565b604082015261206e60608401611fd3565b606082015261207f60808401611fd3565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146120a757600080fd5b60a0919091015292915050565b6000806000806000806000806000898b036102808112156120d457600080fd5b6120dd8b611f18565b995060208b0135985060408b0135975060608b0135965061210060808c01611f63565b955061210e60a08c01611f18565b945061211d8c60c08d01611ff6565b935061212c6101808c01611f18565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe608201121561215e57600080fd5b50612167611faa565b6121746101a08c01611f18565b81526121836101c08c01611f18565b60208201526121956101e08c01611f18565b60408201526121a76102008c01611f18565b60608201526121b96102208c01611f18565b60808201526121cb6102408c01611f18565b60a08201526121dd6102608c01611f18565b60c0820152809150509295985092959850929598565b60005b8381101561220e5781810151838201526020016121f6565b838111156110615750506000910152565b600081518084526122378160208601602086016121f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f5c602083018461221f565b6000806040838503121561228f57600080fd5b50508035926020909101359150565b6000602082840312156122b057600080fd5b611f5c82611f63565b600060c082840312156122cb57600080fd5b611f5c8383611ff6565b6000602082840312156122e757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561232f5761232f6122ee565b500390565b600067ffffffffffffffff808316818516808303821115612357576123576122ee565b01949350505050565b60006020828403121561237257600080fd5b8151611f5c81611fe7565b60006020828403121561238f57600080fd5b815167ffffffffffffffff808211156123a757600080fd5b818401915084601f8301126123bb57600080fd5b8151818111156123cd576123cd611f7b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561241357612413611f7b565b8160405282815287602084870101111561242c57600080fd5b61243d8360208301602088016121f3565b979650505050505050565b600063ffffffff808316818516808303821115612357576123576122ee565b600063ffffffff808416806124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156124d4576124d46122ee565b0294935050505056fea164736f6c634300080f000a53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -4613,13 +4629,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b506200004962000032600160008051602062002a4783398151915262000c39565b60001b600019620000c960201b62000e061760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a08088018490528851968701895283875293860183905296850182905284018190529483018590528201849052620000c39361dead9390928392839290918391908290620000cd565b62000d5c565b9055565b600054610100900460ff1615808015620000ee5750600054600160ff909116105b806200011e57506200010b30620004df60201b62000e0a1760201c565b1580156200011e575060005460ff166001145b620001875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001ab576000805461ff0019166101001790555b620001b5620004ee565b620001c08a62000556565b620001cb87620005d5565b620001d7898962000627565b620001e2866200068b565b620002197f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000c960201b62000e061760201c565b6200025f6200024a60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862000c39565b60001b84620000c960201b62000e061760201c565b620002a96200029060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762000c39565b60001b8360000151620000c960201b62000e061760201c565b620002f3620002da60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862000c39565b60001b8360200151620000c960201b62000e061760201c565b6200033d6200032460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762000c39565b60001b8360400151620000c960201b62000e061760201c565b620003876200036e60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762000c39565b60001b8360600151620000c960201b62000e061760201c565b620003d1620003b860017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad62000c39565b60001b8360800151620000c960201b62000e061760201c565b6200041b6200040260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62000c39565b60001b8360a00151620000c960201b62000e061760201c565b6200042562000728565b620004308462000799565b6200043a62000add565b6001600160401b0316866001600160401b031610156200048c5760405162461bcd60e51b815260206004820152601f6024820152600080516020620029e783398151915260448201526064016200017e565b8015620004d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff166200054a5760405162461bcd60e51b815260206004820152602b602482015260008051602062002a2783398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200017e565b6200055462000b0a565b565b6200056062000b71565b6001600160a01b038116620005c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200017e565b620005d28162000bcd565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062002a07833981519152836040516200061b919062000c53565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062002a07833981519152836040516200067e919062000c53565b60405180910390a3505050565b6200069562000add565b6001600160401b0316816001600160401b03161015620006e75760405162461bcd60e51b815260206004820152601f6024820152600080516020620029e783398151915260448201526064016200017e565b606880546001600160401b0319166001600160401b0383169081179091556040805160208082019390935281518082039093018352810190526002620005f9565b6200075c62000748600160008051602062002a4783398151915262000c39565b60001b62000c1f60201b62000e261760201c565b60000362000554576200055462000784600160008051602062002a4783398151915262000c39565b60001b43620000c960201b62000e061760201c565b8060a001516001600160801b0316816060015163ffffffff161115620008285760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016200017e565b6001816040015160ff1611620008995760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b60648201526084016200017e565b606854608082015182516001600160401b0390921691620008bb919062000cab565b63ffffffff161115620009005760405162461bcd60e51b815260206004820152601f6024820152600080516020620029e783398151915260448201526064016200017e565b6000816020015160ff1611620009715760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b60648201526084016200017e565b8051602082015163ffffffff82169160ff909116906200099390829062000cd6565b6200099f919062000d08565b63ffffffff161462000a1a5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016200017e565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000b059063ffffffff6a010000000000000000000082048116911662000d37565b905090565b600054610100900460ff1662000b665760405162461bcd60e51b815260206004820152602b602482015260008051602062002a2783398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200017e565b620005543362000bcd565b6033546001600160a01b03163314620005545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200017e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b634e487b7160e01b600052601160045260246000fd5b60008282101562000c4e5762000c4e62000c23565b500390565b600060208083528351808285015260005b8181101562000c825785810183015185820160400152820162000c64565b8181111562000c95576000604083870101525b50601f01601f1916929092016040019392505050565b600063ffffffff80831681851680830382111562000ccd5762000ccd62000c23565b01949350505050565b600063ffffffff8084168062000cfc57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000d2e5762000d2e62000c23565b02949350505050565b60006001600160401b0382811684821680830382111562000ccd5762000ccd62000c23565b611c7b8062000d6c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063a711986911610145578063e2a3285c116100bd578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610597578063fd32aa0f1461059f578063ffa1ad74146105a757600080fd5b8063f45e65d81461057a578063f68016b71461058357600080fd5b8063e2a3285c1461054e578063e81b2c6d14610556578063f2b4e6171461055f578063f2fde38b1461056757600080fd5b8063c71973f611610114578063cc731b02116100f9578063cc731b021461040a578063dac6e63a1461053e578063e0e2016d1461054657600080fd5b8063c71973f6146103e4578063c9b26f61146103f757600080fd5b8063a7119869146103b9578063b40a817c146103c1578063bc49ce5f146103d4578063c4e8ddfa146103dc57600080fd5b806348cd4cb1116101d85780635d73369c116101a75780638da5cb5b1161018c5780638da5cb5b14610380578063935f029e1461039e5780639b7d7f0a146103b157600080fd5b80635d73369c14610370578063715018a61461037857600080fd5b806348cd4cb1146102d75780634add321d146102df5780634f16540b1461030057806354fd4d501461032757600080fd5b80630c18c162116102145780630c18c162146102ab57806318d13918146102b457806319f5cea8146102c75780631fd19ee1146102cf57600080fd5b806306c9265714610246578063078f29cf146102615780630a49cb031461028e5780630bbb796814610296575b600080fd5b61024e6105af565b6040519081526020015b60405180910390f35b6102696105dd565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610258565b610269610616565b6102a96102a4366004611928565b610646565b005b61024e60655481565b6102a96102c2366004611a55565b610a44565b61024e610a58565b610269610a83565b61024e610aad565b6102e7610add565b60405167ffffffffffffffff9091168152602001610258565b61024e7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103636040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102589190611ae2565b61024e610b03565b6102a9610b2e565b60335473ffffffffffffffffffffffffffffffffffffffff16610269565b6102a96103ac366004611af5565b610b42565b610269610b58565b610269610b88565b6102a96103cf366004611b17565b610bb8565b61024e610bc9565b610269610bf4565b6102a96103f2366004611b32565b610c24565b6102a9610405366004611b4e565b610c35565b6104ce6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102589190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b610269610c46565b61024e610c76565b61024e610ca1565b61024e60675481565b610269610ccc565b6102a9610575366004611a55565b610cfc565b61024e60665481565b6068546102e79067ffffffffffffffff1681565b61024e610db0565b61024e610ddb565b61024e600081565b6105da60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b81565b600061061161060d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b5490565b905090565b600061061161060d60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b600054610100900460ff16158080156106665750600054600160ff909116105b806106805750303b158015610680575060005460ff166001145b610711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561076f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610777610e2a565b6107808a610cfc565b61078987610ec9565b6107938989610f2a565b61079c86610fbb565b6107c57f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6107f86107f360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b849055565b61082c61082660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b83519055565b61086361085a60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b60208401519055565b61089a61089160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b60408401519055565b6108d16108c860017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b60608401519055565b6109086108ff60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b60808401519055565b61093f61093660017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b60a08401519055565b610947611099565b61095084611101565b610958610add565b67ffffffffffffffff168667ffffffffffffffff1610156109d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b8015610a3857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b610a4c611575565b610a55816115f6565b50565b6105da60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b60006106117f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b600061061161060d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b6069546000906106119063ffffffff6a0100000000000000000000820481169116611bad565b6105da60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b610b36611575565b610b40600061167a565b565b610b4a611575565b610b548282610f2a565b5050565b600061061161060d60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b600061061161060d60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b610bc0611575565b610a5581610fbb565b6105da60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b600061061161060d60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b610c2c611575565b610a5581611101565b610c3d611575565b610a5581610ec9565b600061061161060d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b6105da60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b6105da60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b600061061161060d60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b610d04611575565b73ffffffffffffffffffffffffffffffffffffffff8116610da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610708565b610a558161167a565b6105da60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b6105da60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b5490565b600054610100900460ff16610ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610708565b610b406116f1565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610f1e9190611ae2565b60405180910390a35050565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610fae9190611ae2565b60405180910390a3505050565b610fc3610add565b67ffffffffffffffff168167ffffffffffffffff161015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002610eed565b6110c761060d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b600003610b4057610b406110fc60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff1611156111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610708565b6001816040015160ff1611611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610708565b6068546080820151825167ffffffffffffffff909216916112699190611bd9565b63ffffffff1611156112d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b6000816020015160ff161161136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610708565b8051602082015163ffffffff82169160ff9091169061138e908290611bf8565b6113989190611c42565b63ffffffff161461142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610708565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610708565b61161f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506003610eed565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610708565b610b403361167a565b803573ffffffffffffffffffffffffffffffffffffffff811681146117b557600080fd5b919050565b803567ffffffffffffffff811681146117b557600080fd5b60405160c0810167ffffffffffffffff8111828210171561181c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803563ffffffff811681146117b557600080fd5b803560ff811681146117b557600080fd5b600060c0828403121561185957600080fd5b60405160c0810181811067ffffffffffffffff821117156118a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806118b283611822565b81526118c060208401611836565b60208201526118d160408401611836565b60408201526118e260608401611822565b60608201526118f360808401611822565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461191b57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361026081121561194857600080fd5b6119518b611791565b995060208b0135985060408b0135975060608b0135965061197460808c016117ba565b955061198260a08c01611791565b94506119918c60c08d01611847565b93506119a06101808c01611791565b925060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156119d257600080fd5b506119db6117d2565b6119e86101a08c01611791565b81526119f76101c08c01611791565b6020820152611a096101e08c01611791565b6040820152611a1b6102008c01611791565b6060820152611a2d6102208c01611791565b6080820152611a3f6102408c01611791565b60a0820152809150509295985092959850929598565b600060208284031215611a6757600080fd5b611a7082611791565b9392505050565b6000815180845260005b81811015611a9d57602081850181015186830182015201611a81565b81811115611aaf576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a706020830184611a77565b60008060408385031215611b0857600080fd5b50508035926020909101359150565b600060208284031215611b2957600080fd5b611a70826117ba565b600060c08284031215611b4457600080fd5b611a708383611847565b600060208284031215611b6057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611ba857611ba8611b67565b500390565b600067ffffffffffffffff808316818516808303821115611bd057611bd0611b67565b01949350505050565b600063ffffffff808316818516808303821115611bd057611bd0611b67565b600063ffffffff80841680611c36577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615611c6557611c65611b67565b0294935050505056fea164736f6c634300080f000a53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", - "deployedCode": "0x608060405234801561001057600080fd5b50600436106102415760003560e01c8063a711986911610145578063e2a3285c116100bd578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610597578063fd32aa0f1461059f578063ffa1ad74146105a757600080fd5b8063f45e65d81461057a578063f68016b71461058357600080fd5b8063e2a3285c1461054e578063e81b2c6d14610556578063f2b4e6171461055f578063f2fde38b1461056757600080fd5b8063c71973f611610114578063cc731b02116100f9578063cc731b021461040a578063dac6e63a1461053e578063e0e2016d1461054657600080fd5b8063c71973f6146103e4578063c9b26f61146103f757600080fd5b8063a7119869146103b9578063b40a817c146103c1578063bc49ce5f146103d4578063c4e8ddfa146103dc57600080fd5b806348cd4cb1116101d85780635d73369c116101a75780638da5cb5b1161018c5780638da5cb5b14610380578063935f029e1461039e5780639b7d7f0a146103b157600080fd5b80635d73369c14610370578063715018a61461037857600080fd5b806348cd4cb1146102d75780634add321d146102df5780634f16540b1461030057806354fd4d501461032757600080fd5b80630c18c162116102145780630c18c162146102ab57806318d13918146102b457806319f5cea8146102c75780631fd19ee1146102cf57600080fd5b806306c9265714610246578063078f29cf146102615780630a49cb031461028e5780630bbb796814610296575b600080fd5b61024e6105af565b6040519081526020015b60405180910390f35b6102696105dd565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610258565b610269610616565b6102a96102a4366004611928565b610646565b005b61024e60655481565b6102a96102c2366004611a55565b610a44565b61024e610a58565b610269610a83565b61024e610aad565b6102e7610add565b60405167ffffffffffffffff9091168152602001610258565b61024e7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103636040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102589190611ae2565b61024e610b03565b6102a9610b2e565b60335473ffffffffffffffffffffffffffffffffffffffff16610269565b6102a96103ac366004611af5565b610b42565b610269610b58565b610269610b88565b6102a96103cf366004611b17565b610bb8565b61024e610bc9565b610269610bf4565b6102a96103f2366004611b32565b610c24565b6102a9610405366004611b4e565b610c35565b6104ce6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102589190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b610269610c46565b61024e610c76565b61024e610ca1565b61024e60675481565b610269610ccc565b6102a9610575366004611a55565b610cfc565b61024e60665481565b6068546102e79067ffffffffffffffff1681565b61024e610db0565b61024e610ddb565b61024e600081565b6105da60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b81565b600061061161060d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b5490565b905090565b600061061161060d60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b600054610100900460ff16158080156106665750600054600160ff909116105b806106805750303b158015610680575060005460ff166001145b610711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561076f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610777610e2a565b6107808a610cfc565b61078987610ec9565b6107938989610f2a565b61079c86610fbb565b6107c57f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6107f86107f360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b849055565b61082c61082660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b83519055565b61086361085a60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b60208401519055565b61089a61089160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b60408401519055565b6108d16108c860017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b60608401519055565b6109086108ff60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b60808401519055565b61093f61093660017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b60a08401519055565b610947611099565b61095084611101565b610958610add565b67ffffffffffffffff168667ffffffffffffffff1610156109d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b8015610a3857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b610a4c611575565b610a55816115f6565b50565b6105da60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b60006106117f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b600061061161060d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b6069546000906106119063ffffffff6a0100000000000000000000820481169116611bad565b6105da60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b610b36611575565b610b40600061167a565b565b610b4a611575565b610b548282610f2a565b5050565b600061061161060d60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b600061061161060d60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b610bc0611575565b610a5581610fbb565b6105da60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b600061061161060d60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b610c2c611575565b610a5581611101565b610c3d611575565b610a5581610ec9565b600061061161060d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b6105da60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b6105da60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b600061061161060d60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b610d04611575565b73ffffffffffffffffffffffffffffffffffffffff8116610da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610708565b610a558161167a565b6105da60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b6105da60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b5490565b600054610100900460ff16610ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610708565b610b406116f1565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610f1e9190611ae2565b60405180910390a35050565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610fae9190611ae2565b60405180910390a3505050565b610fc3610add565b67ffffffffffffffff168167ffffffffffffffff161015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002610eed565b6110c761060d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b600003610b4057610b406110fc60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff1611156111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610708565b6001816040015160ff1611611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610708565b6068546080820151825167ffffffffffffffff909216916112699190611bd9565b63ffffffff1611156112d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b6000816020015160ff161161136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610708565b8051602082015163ffffffff82169160ff9091169061138e908290611bf8565b6113989190611c42565b63ffffffff161461142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610708565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610708565b61161f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506003610eed565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610708565b610b403361167a565b803573ffffffffffffffffffffffffffffffffffffffff811681146117b557600080fd5b919050565b803567ffffffffffffffff811681146117b557600080fd5b60405160c0810167ffffffffffffffff8111828210171561181c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803563ffffffff811681146117b557600080fd5b803560ff811681146117b557600080fd5b600060c0828403121561185957600080fd5b60405160c0810181811067ffffffffffffffff821117156118a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806118b283611822565b81526118c060208401611836565b60208201526118d160408401611836565b60408201526118e260608401611822565b60608201526118f360808401611822565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461191b57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361026081121561194857600080fd5b6119518b611791565b995060208b0135985060408b0135975060608b0135965061197460808c016117ba565b955061198260a08c01611791565b94506119918c60c08d01611847565b93506119a06101808c01611791565b925060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156119d257600080fd5b506119db6117d2565b6119e86101a08c01611791565b81526119f76101c08c01611791565b6020820152611a096101e08c01611791565b6040820152611a1b6102008c01611791565b6060820152611a2d6102208c01611791565b6080820152611a3f6102408c01611791565b60a0820152809150509295985092959850929598565b600060208284031215611a6757600080fd5b611a7082611791565b9392505050565b6000815180845260005b81811015611a9d57602081850181015186830182015201611a81565b81811115611aaf576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a706020830184611a77565b60008060408385031215611b0857600080fd5b50508035926020909101359150565b600060208284031215611b2957600080fd5b611a70826117ba565b600060c08284031215611b4457600080fd5b611a708383611847565b600060208284031215611b6057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611ba857611ba8611b67565b500390565b600067ffffffffffffffff808316818516808303821115611bd057611bd0611b67565b01949350505050565b600063ffffffff808316818516808303821115611bd057611bd0611b67565b600063ffffffff80841680611c36577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615611c6557611c65611b67565b0294935050505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000496200003260016000805160206200382983398151915262001086565b60001b600019620000d160201b62000ed21760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b620012af565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000ed61760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000ed21760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001086565b60001b84620000d160201b62000ed21760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001086565b60001b8360000151620000d160201b62000ed21760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001086565b60001b8360200151620000d160201b62000ed21760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001086565b60001b8360400151620000d160201b62000ed21760201c565b6200038f6200037660017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762001086565b60001b8360600151620000d160201b62000ed21760201c565b620003c8620003af60016000805160206200380983398151915262001086565b60001b8360800151620000d160201b62000ed21760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001086565b60001b8360a00151620000d160201b62000ed21760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a15565b6200044162000d59565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d86565b565b6200056762000ded565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e49565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b6000600080516020620037c983398151915283604051620006229190620010cf565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f19818403018152919052905060016000600080516020620037c983398151915283604051620006859190620010cf565b60405180910390a3505050565b6200069c62000d59565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200382983398151915262001086565b60001b62000e9b60201b620006a41760201c565b6000036200055b576200055b6200078b60016000805160206200382983398151915262001086565b60001b43620000d160201b62000ed21760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000820573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000846919062001104565b60ff1614620008af5760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b60006200092f826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200091e919081019062001146565b62000e9f60201b62000ef21760201c565b9050600062000976836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b905062000992836012848462000f3760201b62000f951760201c565b6200099c62001024565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b158015620009f757600080fd5b505af115801562000a0c573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000aa45760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b155760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b379190620011fe565b63ffffffff16111562000b7c5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b6000816020015160ff161162000bed5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c0f90829062001229565b62000c1b91906200125b565b63ffffffff161462000c965760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d819063ffffffff6a01000000000000000000008204811691166200128a565b905090565b600054610100900460ff1662000de25760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e49565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b600060208251111562000f1b5760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f31826200104660201b620010671760201c565b92915050565b62000f9262000f6860017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec62001086565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000ed21760201c565b62000fd862000fc360017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001086565b60001b83620000d160201b62000ed21760201c565b6200101e6200100960017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001086565b60001b82620000d160201b62000ed21760201c565b50505050565b600062000d816200074f60016000805160206200380983398151915262001086565b8051602181106200105f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b634e487b7160e01b600052601160045260246000fd5b6000828210156200109b576200109b62001070565b500390565b60005b83811015620010bd578181015183820152602001620010a3565b838111156200101e5750506000910152565b6020815260008251806020840152620010f0816040850160208701620010a0565b601f01601f19169190910160400192915050565b6000602082840312156200111757600080fd5b815160ff811681146200112957600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200115957600080fd5b81516001600160401b03808211156200117157600080fd5b818401915084601f8301126200118657600080fd5b8151818111156200119b576200119b62001130565b604051601f8201601f19908116603f01168101908382118183101715620011c657620011c662001130565b81604052828152876020848701011115620011e057600080fd5b620011f3836020830160208801620010a0565b979650505050505050565b600063ffffffff80831681851680830382111562001220576200122062001070565b01949350505050565b600063ffffffff808416806200124f57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562001281576200128162001070565b02949350505050565b60006001600160401b0382811684821680830382111562001220576200122062001070565b6124ea80620012bf6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063a711986911610160578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461062e578063fd32aa0f14610636578063ffa1ad741461063e57600080fd5b8063f45e65d814610611578063f68016b71461061a57600080fd5b8063e81b2c6d116100bd578063e81b2c6d146105ed578063f2b4e617146105f6578063f2fde38b146105fe57600080fd5b8063e0e2016d146105dd578063e2a3285c146105e557600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b0214610499578063d8444715146105cd578063dac6e63a146105d557600080fd5b8063c71973f614610473578063c9b26f611461048657600080fd5b8063a711986914610448578063b40a817c14610450578063bc49ce5f14610463578063c4e8ddfa1461046b57600080fd5b80634add321d1161020e5780635d73369c116101c25780638da5cb5b116101a75780638da5cb5b1461040f578063935f029e1461042d5780639b7d7f0a1461044057600080fd5b80635d73369c146103ff578063715018a61461040757600080fd5b80634f16540b116101f35780634f16540b1461038757806354fd4d50146103ae578063550fcdc9146103f757600080fd5b80634add321d146103535780634c1e843d1461037457600080fd5b806318d13918116102655780631fd19ee11161024a5780631fd19ee11461030d5780634397dfef1461031557806348cd4cb11461034b57600080fd5b806318d13918146102f057806319f5cea81461030557600080fd5b806306c9265714610297578063078f29cf146102b25780630a49cb03146102df5780630c18c162146102e7575b600080fd5b61029f610646565b6040519081526020015b60405180910390f35b6102ba610674565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a9565b6102ba6106ad565b61029f60655481565b6103036102fe366004611f41565b6106dd565b005b61029f6106f1565b6102ba61071c565b61031d610746565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102a9565b61029f61075a565b61035b61078a565b60405167ffffffffffffffff90911681526020016102a9565b6103036103823660046120b4565b6107b0565b61029f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103ea6040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a99190612269565b6103ea610bbb565b61029f610bc5565b610303610bf0565b60335473ffffffffffffffffffffffffffffffffffffffff166102ba565b61030361043b36600461227c565b610c04565b6102ba610c1a565b6102ba610c4a565b61030361045e36600461229e565b610c7a565b61029f610c8b565b6102ba610cb6565b6103036104813660046122b9565b610ce6565b6103036104943660046122d5565b610cf7565b61055d6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102a99190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6103ea610d08565b6102ba610d12565b61029f610d42565b61029f610d6d565b61029f60675481565b6102ba610d98565b61030361060c366004611f41565b610dc8565b61029f60665481565b60685461035b9067ffffffffffffffff1681565b61029f610e7c565b61029f610ea7565b61029f600081565b61067160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b81565b60006106a86106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b5490565b905090565b60006106a86106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b6106e5611090565b6106ee81611111565b50565b61067160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60006106a87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107516111ce565b90939092509050565b60006106a86106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b6069546000906106a89063ffffffff6a0100000000000000000000820481169116612334565b600054610100900460ff16158080156107d05750600054600160ff909116105b806107ea5750303b1580156107ea575060005460ff166001145b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108e161124b565b6108ea8a610dc8565b6108f3876112ea565b6108fd8989611312565b610906866113a3565b61092f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b61096261095d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b849055565b61099661099060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b83519055565b6109cd6109c460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60208401519055565b610a046109fb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b60408401519055565b610a3b610a3260017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60608401519055565b610a72610a6960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b60808401519055565b610aa9610aa060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60a08401519055565b610ab1611481565b610abe8260c001516114e9565b610ac7846117e2565b610acf61078a565b67ffffffffffffffff168667ffffffffffffffff161015610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b8015610baf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106a8611c56565b61067160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610bf8611090565b610c026000611d17565b565b610c0c611090565b610c168282611312565b5050565b60006106a86106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60006106a86106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610c82611090565b6106ee816113a3565b61067160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b60006106a86106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b610cee611090565b6106ee816117e2565b610cff611090565b6106ee816112ea565b60606106a8611d8e565b60006106a86106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b61067160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b61067160017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60006106a86106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b610dd0611090565b73ffffffffffffffffffffffffffffffffffffffff8116610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610872565b6106ee81611d17565b61067160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b61067160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e203332206279746573000000000000000000006064820152608401610872565b610f8f82611067565b92915050565b610ffb610fc360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61102e61102960017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b839055565b61106161105c60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b829055565b50505050565b80516021811061107f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610872565b61113a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516111c29190612269565b60405180910390a35050565b600080806112006106a460017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261123f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b600054610100900460ff166112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c02611e44565b6067819055604080516020808201849052825180830390910181529082019091526000611191565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113969190612269565b60405180910390a3505050565b6113ab61078a565b67ffffffffffffffff168167ffffffffffffffff161015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611191565b6114af6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b600003610c0257610c026114e460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611538575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b156106ee57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190612360565b60ff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e0000000000000000000000000000000000006064820152608401610872565b60006116dc8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116d7919081019061237d565b610ef2565b9050600061172e8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b905061173d8360128484610f95565b6117456106ad565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610872565b6001816040015160ff1611611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610872565b6068546080820151825167ffffffffffffffff9092169161194a9190612448565b63ffffffff1611156119b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b6000816020015160ff1611611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610872565b8051602082015163ffffffff82169160ff90911690611a6f908290612467565b611a7991906124b1565b63ffffffff1614611b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610872565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611c626111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cdb57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b611ee4565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611d9a6111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e1357505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b600054610100900460ff16611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c0233611d17565b60405160005b82811a15611efa57600101611eea565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f3c57600080fd5b919050565b600060208284031215611f5357600080fd5b611f5c82611f18565b9392505050565b803567ffffffffffffffff81168114611f3c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611fcd57611fcd611f7b565b60405290565b803563ffffffff81168114611f3c57600080fd5b60ff811681146106ee57600080fd5b600060c0828403121561200857600080fd5b60405160c0810181811067ffffffffffffffff8211171561202b5761202b611f7b565b60405290508061203a83611fd3565b8152602083013561204a81611fe7565b6020820152604083013561205d81611fe7565b604082015261206e60608401611fd3565b606082015261207f60808401611fd3565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146120a757600080fd5b60a0919091015292915050565b6000806000806000806000806000898b036102808112156120d457600080fd5b6120dd8b611f18565b995060208b0135985060408b0135975060608b0135965061210060808c01611f63565b955061210e60a08c01611f18565b945061211d8c60c08d01611ff6565b935061212c6101808c01611f18565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe608201121561215e57600080fd5b50612167611faa565b6121746101a08c01611f18565b81526121836101c08c01611f18565b60208201526121956101e08c01611f18565b60408201526121a76102008c01611f18565b60608201526121b96102208c01611f18565b60808201526121cb6102408c01611f18565b60a08201526121dd6102608c01611f18565b60c0820152809150509295985092959850929598565b60005b8381101561220e5781810151838201526020016121f6565b838111156110615750506000910152565b600081518084526122378160208601602086016121f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f5c602083018461221f565b6000806040838503121561228f57600080fd5b50508035926020909101359150565b6000602082840312156122b057600080fd5b611f5c82611f63565b600060c082840312156122cb57600080fd5b611f5c8383611ff6565b6000602082840312156122e757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561232f5761232f6122ee565b500390565b600067ffffffffffffffff808316818516808303821115612357576123576122ee565b01949350505050565b60006020828403121561237257600080fd5b8151611f5c81611fe7565b60006020828403121561238f57600080fd5b815167ffffffffffffffff808211156123a757600080fd5b818401915084601f8301126123bb57600080fd5b8151818111156123cd576123cd611f7b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561241357612413611f7b565b8160405282815287602084870101111561242c57600080fd5b61243d8360208301602088016121f3565b979650505050505050565b600063ffffffff808316818516808303821115612357576123576122ee565b600063ffffffff808416806124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156124d4576124d46122ee565b0294935050505056fea164736f6c634300080f000a53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", + "deployedCode": "0x608060405234801561001057600080fd5b50600436106102925760003560e01c8063a711986911610160578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461062e578063fd32aa0f14610636578063ffa1ad741461063e57600080fd5b8063f45e65d814610611578063f68016b71461061a57600080fd5b8063e81b2c6d116100bd578063e81b2c6d146105ed578063f2b4e617146105f6578063f2fde38b146105fe57600080fd5b8063e0e2016d146105dd578063e2a3285c146105e557600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b0214610499578063d8444715146105cd578063dac6e63a146105d557600080fd5b8063c71973f614610473578063c9b26f611461048657600080fd5b8063a711986914610448578063b40a817c14610450578063bc49ce5f14610463578063c4e8ddfa1461046b57600080fd5b80634add321d1161020e5780635d73369c116101c25780638da5cb5b116101a75780638da5cb5b1461040f578063935f029e1461042d5780639b7d7f0a1461044057600080fd5b80635d73369c146103ff578063715018a61461040757600080fd5b80634f16540b116101f35780634f16540b1461038757806354fd4d50146103ae578063550fcdc9146103f757600080fd5b80634add321d146103535780634c1e843d1461037457600080fd5b806318d13918116102655780631fd19ee11161024a5780631fd19ee11461030d5780634397dfef1461031557806348cd4cb11461034b57600080fd5b806318d13918146102f057806319f5cea81461030557600080fd5b806306c9265714610297578063078f29cf146102b25780630a49cb03146102df5780630c18c162146102e7575b600080fd5b61029f610646565b6040519081526020015b60405180910390f35b6102ba610674565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a9565b6102ba6106ad565b61029f60655481565b6103036102fe366004611f41565b6106dd565b005b61029f6106f1565b6102ba61071c565b61031d610746565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102a9565b61029f61075a565b61035b61078a565b60405167ffffffffffffffff90911681526020016102a9565b6103036103823660046120b4565b6107b0565b61029f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103ea6040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a99190612269565b6103ea610bbb565b61029f610bc5565b610303610bf0565b60335473ffffffffffffffffffffffffffffffffffffffff166102ba565b61030361043b36600461227c565b610c04565b6102ba610c1a565b6102ba610c4a565b61030361045e36600461229e565b610c7a565b61029f610c8b565b6102ba610cb6565b6103036104813660046122b9565b610ce6565b6103036104943660046122d5565b610cf7565b61055d6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102a99190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6103ea610d08565b6102ba610d12565b61029f610d42565b61029f610d6d565b61029f60675481565b6102ba610d98565b61030361060c366004611f41565b610dc8565b61029f60665481565b60685461035b9067ffffffffffffffff1681565b61029f610e7c565b61029f610ea7565b61029f600081565b61067160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b81565b60006106a86106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b5490565b905090565b60006106a86106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b6106e5611090565b6106ee81611111565b50565b61067160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60006106a87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107516111ce565b90939092509050565b60006106a86106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b6069546000906106a89063ffffffff6a0100000000000000000000820481169116612334565b600054610100900460ff16158080156107d05750600054600160ff909116105b806107ea5750303b1580156107ea575060005460ff166001145b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108e161124b565b6108ea8a610dc8565b6108f3876112ea565b6108fd8989611312565b610906866113a3565b61092f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b61096261095d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b849055565b61099661099060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b83519055565b6109cd6109c460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60208401519055565b610a046109fb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b60408401519055565b610a3b610a3260017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60608401519055565b610a72610a6960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b60808401519055565b610aa9610aa060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60a08401519055565b610ab1611481565b610abe8260c001516114e9565b610ac7846117e2565b610acf61078a565b67ffffffffffffffff168667ffffffffffffffff161015610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b8015610baf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106a8611c56565b61067160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610bf8611090565b610c026000611d17565b565b610c0c611090565b610c168282611312565b5050565b60006106a86106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60006106a86106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610c82611090565b6106ee816113a3565b61067160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b60006106a86106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b610cee611090565b6106ee816117e2565b610cff611090565b6106ee816112ea565b60606106a8611d8e565b60006106a86106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b61067160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b61067160017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60006106a86106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b610dd0611090565b73ffffffffffffffffffffffffffffffffffffffff8116610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610872565b6106ee81611d17565b61067160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b61067160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e203332206279746573000000000000000000006064820152608401610872565b610f8f82611067565b92915050565b610ffb610fc360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61102e61102960017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b839055565b61106161105c60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b829055565b50505050565b80516021811061107f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610872565b61113a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516111c29190612269565b60405180910390a35050565b600080806112006106a460017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261123f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b600054610100900460ff166112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c02611e44565b6067819055604080516020808201849052825180830390910181529082019091526000611191565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113969190612269565b60405180910390a3505050565b6113ab61078a565b67ffffffffffffffff168167ffffffffffffffff161015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611191565b6114af6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b600003610c0257610c026114e460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611538575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b156106ee57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190612360565b60ff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e0000000000000000000000000000000000006064820152608401610872565b60006116dc8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116d7919081019061237d565b610ef2565b9050600061172e8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b905061173d8360128484610f95565b6117456106ad565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610872565b6001816040015160ff1611611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610872565b6068546080820151825167ffffffffffffffff9092169161194a9190612448565b63ffffffff1611156119b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b6000816020015160ff1611611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610872565b8051602082015163ffffffff82169160ff90911690611a6f908290612467565b611a7991906124b1565b63ffffffff1614611b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610872565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611c626111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cdb57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b611ee4565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611d9a6111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e1357505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b600054610100900460ff16611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c0233611d17565b60405160005b82811a15611efa57600101611eea565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f3c57600080fd5b919050565b600060208284031215611f5357600080fd5b611f5c82611f18565b9392505050565b803567ffffffffffffffff81168114611f3c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611fcd57611fcd611f7b565b60405290565b803563ffffffff81168114611f3c57600080fd5b60ff811681146106ee57600080fd5b600060c0828403121561200857600080fd5b60405160c0810181811067ffffffffffffffff8211171561202b5761202b611f7b565b60405290508061203a83611fd3565b8152602083013561204a81611fe7565b6020820152604083013561205d81611fe7565b604082015261206e60608401611fd3565b606082015261207f60808401611fd3565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146120a757600080fd5b60a0919091015292915050565b6000806000806000806000806000898b036102808112156120d457600080fd5b6120dd8b611f18565b995060208b0135985060408b0135975060608b0135965061210060808c01611f63565b955061210e60a08c01611f18565b945061211d8c60c08d01611ff6565b935061212c6101808c01611f18565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe608201121561215e57600080fd5b50612167611faa565b6121746101a08c01611f18565b81526121836101c08c01611f18565b60208201526121956101e08c01611f18565b60408201526121a76102008c01611f18565b60608201526121b96102208c01611f18565b60808201526121cb6102408c01611f18565b60a08201526121dd6102608c01611f18565b60c0820152809150509295985092959850929598565b60005b8381101561220e5781810151838201526020016121f6565b838111156110615750506000910152565b600081518084526122378160208601602086016121f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f5c602083018461221f565b6000806040838503121561228f57600080fd5b50508035926020909101359150565b6000602082840312156122b057600080fd5b611f5c82611f63565b600060c082840312156122cb57600080fd5b611f5c8383611ff6565b6000602082840312156122e757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561232f5761232f6122ee565b500390565b600067ffffffffffffffff808316818516808303821115612357576123576122ee565b01949350505050565b60006020828403121561237257600080fd5b8151611f5c81611fe7565b60006020828403121561238f57600080fd5b815167ffffffffffffffff808211156123a757600080fd5b818401915084601f8301126123bb57600080fd5b8151818111156123cd576123cd611f7b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561241357612413611f7b565b8160405282815287602084870101111561242c57600080fd5b61243d8360208301602088016121f3565b979650505050505050565b600063ffffffff808316818516808303821115612357576123576122ee565b600063ffffffff808416806124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156124d4576124d46122ee565b0294935050505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -4627,7 +4643,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4635,7 +4651,7 @@ "slot": "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4643,7 +4659,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4651,7 +4667,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4659,7 +4675,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4667,7 +4683,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -4675,7 +4691,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -4683,7 +4699,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4691,7 +4707,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4699,7 +4715,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4707,7 +4723,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4715,7 +4731,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", "previousValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", @@ -4723,7 +4739,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", "previousValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", @@ -4731,7 +4747,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", @@ -4739,7 +4755,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4747,7 +4763,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000067" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4755,7 +4771,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000065" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4763,7 +4779,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000066" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4771,7 +4787,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4779,7 +4795,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4787,7 +4803,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4795,7 +4811,7 @@ "slot": "0x65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4803,7 +4819,7 @@ "slot": "0x71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc597" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4811,7 +4827,7 @@ "slot": "0x383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4819,7 +4835,7 @@ "slot": "0x46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4827,7 +4843,7 @@ "slot": "0x9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4835,7 +4851,7 @@ "slot": "0x52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa906" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4843,7 +4859,7 @@ "slot": "0x4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4851,7 +4867,7 @@ "slot": "0xa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320c" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "previousValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", @@ -4859,7 +4875,7 @@ "slot": "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -4867,7 +4883,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4875,7 +4891,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000020100000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4883,7 +4899,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000020100000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000020100000001", @@ -4891,7 +4907,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4899,7 +4915,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4928,7 +4944,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4942,7 +4958,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000020100000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000020100000001", @@ -4954,7 +4970,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4968,7 +4984,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -4980,7 +4996,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4994,7 +5010,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5006,7 +5022,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5020,7 +5036,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5032,7 +5048,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5046,7 +5062,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5058,7 +5074,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5072,7 +5088,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5084,7 +5100,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5098,7 +5114,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5110,7 +5126,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5124,7 +5140,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "previousValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", @@ -5136,7 +5152,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5150,7 +5166,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5162,7 +5178,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5176,7 +5192,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5188,7 +5204,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5202,7 +5218,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5214,7 +5230,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5228,7 +5244,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5240,7 +5256,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5254,7 +5270,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5266,7 +5282,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5280,7 +5296,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5292,7 +5308,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5306,7 +5322,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5357,7 +5373,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b506200001f60008062000025565b62000234565b600054610100900460ff1615808015620000465750600054600160ff909116105b8062000076575062000063306200018a60201b620005511760201c565b15801562000076575060005460ff166001145b620000df5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000103576000805461ff0019166101001790555b603280546001600160a01b0319166001600160a01b0384161790556200013e8373420000000000000000000000000000000000001062000199565b801562000185576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054610100900460ff16620002065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d6565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612c4d80620002446000396000f3fe6080604052600436106101795760003560e01c80637f46ddb2116100cb578063927ede2d1161007f578063b1a1a88211610059578063b1a1a882146104fe578063c89701a214610511578063e11013dd1461053e57600080fd5b8063927ede2d146104a05780639a2ac6d5146104cb578063a9f9e675146104de57600080fd5b806387087623116100b0578063870876231461043a5780638f601f661461045a57806391c49bf8146103ef57600080fd5b80637f46ddb2146103ef578063838b25201461041a57600080fd5b80633cb747bf1161012d57806354fd4d501161010757806354fd4d501461035457806358a997f6146103aa5780635c975abb146103ca57600080fd5b80633cb747bf146102e7578063485cc95514610314578063540abf731461033457600080fd5b80631532ec341161015e5780631532ec341461026a5780631635f5fd1461027d57806335e80ab31461029057600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b15610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610230333362030d406040518060200160405280600081525061056d565b005b600080fd5b34801561024357600080fd5b506102306102523660046126b1565b610580565b610230610265366004612762565b61099a565b6102306102783660046127b5565b610a71565b61023061028b3660046127b5565b610a85565b34801561029c57600080fd5b506032546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102f357600080fd5b506003546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032057600080fd5b5061023061032f366004612828565b610f4e565b34801561034057600080fd5b5061023061034f366004612861565b611137565b34801561036057600080fd5b5061039d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102de919061294e565b3480156103b657600080fd5b506102306103c5366004612961565b61117c565b3480156103d657600080fd5b506103df611250565b60405190151581526020016102de565b3480156103fb57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102bd565b34801561042657600080fd5b50610230610435366004612861565b6112e9565b34801561044657600080fd5b50610230610455366004612961565b61132e565b34801561046657600080fd5b50610492610475366004612828565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102de565b3480156104ac57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102bd565b6102306104d93660046129e4565b611402565b3480156104ea57600080fd5b506102306104f93660046126b1565b611444565b61023061050c366004612762565b611453565b34801561051d57600080fd5b506004546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b61023061054c3660046129e4565b611524565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61057a8484348585611567565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610653575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063b9190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b61070d611250565b15610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b61077d87611731565b156108cb5761078c8787611793565b61083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5050505061094d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610909908490612a93565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561094d9085856118b3565b610991878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061198792505050565b50505050505050565b333b15610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b505050565b610a7e8585858585610a85565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b58575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b610c12611250565b15610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b823414610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610209565b3073ffffffffffffffffffffffffffffffffffffffff851603610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610209565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610209565b610e9a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a1592505050565b6000610eb7855a8660405180602001604052806000815250611a88565b905080610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610209565b505050505050565b600054610100900460ff1615808015610f6e5750600054600160ff909116105b80610f885750303b158015610f88575060005460ff166001145b611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610209565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556110d083734200000000000000000000000000000000000010611aa2565b8015610a6c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b333b1561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190612aaa565b905090565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b333b156113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b61057a33858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61099187878787878787610580565b333b156114e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c33338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61057a3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b8234146115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610209565b61160285858584611ec6565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611665908b908b9086908a90602401612acc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116f892918890600401612b15565b6000604051808303818588803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b50505050505050505050565b600061175d827f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b8061178d575061178d827fec4fc8e300000000000000000000000000000000000000000000000000000000611f39565b92915050565b60006117bf837f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b15611868578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118339190612a47565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061178d565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a6c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f5c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b38686866040516119ff93929190612b5a565b60405180910390a4610f46868686868686612068565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611a74929190612b98565b60405180910390a361057a848484846120f0565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610209565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b611b9587611731565b15611ce357611ba48787611793565b611c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b50505050611d77565b611d0573ffffffffffffffffffffffffffffffffffffffff881686308661215d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611d43908490612bb1565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611d858787878787866121bb565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611de9908b908d908c908c908c908b90602401612bc9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611e7c92918790600401612b15565b600060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b5050505050505050505050565b61099187878787878787611b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051611f25929190612b98565b60405180910390a361057a84848484612249565b6000611f44836122a8565b8015611f555750611f55838361230c565b9392505050565b6000611fbe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123db9092919063ffffffff16565b805190915015610a6c5780806020019051810190611fdc9190612aaa565b610a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610209565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516120e093929190612b5a565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161214f929190612b98565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261057a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611905565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161223393929190612b5a565b60405180910390a4610f468686868686866123f2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161214f929190612b98565b60006122d4827f01ffc9a70000000000000000000000000000000000000000000000000000000061230c565b801561178d5750612305827fffffffff0000000000000000000000000000000000000000000000000000000061230c565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156123c4575060208210155b80156123d05750600081115b979650505050505050565b60606123ea848460008561246a565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516120e093929190612b5a565b6060824710156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610209565b73ffffffffffffffffffffffffffffffffffffffff85163b61257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610209565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a39190612c24565b60006040518083038185875af1925050503d80600081146125e0576040519150601f19603f3d011682016040523d82523d6000602084013e6125e5565b606091505b50915091506123d0828286606083156125ff575081611f55565b82511561260f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610209919061294e565b73ffffffffffffffffffffffffffffffffffffffff8116811461266557600080fd5b50565b60008083601f84011261267a57600080fd5b50813567ffffffffffffffff81111561269257600080fd5b6020830191508360208285010111156126aa57600080fd5b9250929050565b600080600080600080600060c0888a0312156126cc57600080fd5b87356126d781612643565b965060208801356126e781612643565b955060408801356126f781612643565b9450606088013561270781612643565b93506080880135925060a088013567ffffffffffffffff81111561272a57600080fd5b6127368a828b01612668565b989b979a50959850939692959293505050565b803563ffffffff8116811461275d57600080fd5b919050565b60008060006040848603121561277757600080fd5b61278084612749565b9250602084013567ffffffffffffffff81111561279c57600080fd5b6127a886828701612668565b9497909650939450505050565b6000806000806000608086880312156127cd57600080fd5b85356127d881612643565b945060208601356127e881612643565b935060408601359250606086013567ffffffffffffffff81111561280b57600080fd5b61281788828901612668565b969995985093965092949392505050565b6000806040838503121561283b57600080fd5b823561284681612643565b9150602083013561285681612643565b809150509250929050565b600080600080600080600060c0888a03121561287c57600080fd5b873561288781612643565b9650602088013561289781612643565b955060408801356128a781612643565b9450606088013593506128bc60808901612749565b925060a088013567ffffffffffffffff81111561272a57600080fd5b60005b838110156128f35781810151838201526020016128db565b8381111561057a5750506000910152565b6000815180845261291c8160208601602086016128d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f556020830184612904565b60008060008060008060a0878903121561297a57600080fd5b863561298581612643565b9550602087013561299581612643565b9450604087013593506129aa60608801612749565b9250608087013567ffffffffffffffff8111156129c657600080fd5b6129d289828a01612668565b979a9699509497509295939492505050565b600080600080606085870312156129fa57600080fd5b8435612a0581612643565b9350612a1360208601612749565b9250604085013567ffffffffffffffff811115612a2f57600080fd5b612a3b87828801612668565b95989497509550505050565b600060208284031215612a5957600080fd5b8151611f5581612643565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612aa557612aa5612a64565b500390565b600060208284031215612abc57600080fd5b81518015158114611f5557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612b0b6080830184612904565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612b446060830185612904565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612b8f6060830184612904565b95945050505050565b8281526040602082015260006123ea6040830184612904565b60008219821115612bc457612bc4612a64565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c1860c0830184612904565b98975050505050505050565b60008251612c368184602087016128d8565b919091019291505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -5369,13 +5385,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b506200001f60008062000025565b62000234565b600054610100900460ff1615808015620000465750600054600160ff909116105b8062000076575062000063306200018a60201b620005511760201c565b15801562000076575060005460ff166001145b620000df5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000103576000805461ff0019166101001790555b603280546001600160a01b0319166001600160a01b0384161790556200013e8373420000000000000000000000000000000000001062000199565b801562000185576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054610100900460ff16620002065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d6565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612c4d80620002446000396000f3fe6080604052600436106101795760003560e01c80637f46ddb2116100cb578063927ede2d1161007f578063b1a1a88211610059578063b1a1a882146104fe578063c89701a214610511578063e11013dd1461053e57600080fd5b8063927ede2d146104a05780639a2ac6d5146104cb578063a9f9e675146104de57600080fd5b806387087623116100b0578063870876231461043a5780638f601f661461045a57806391c49bf8146103ef57600080fd5b80637f46ddb2146103ef578063838b25201461041a57600080fd5b80633cb747bf1161012d57806354fd4d501161010757806354fd4d501461035457806358a997f6146103aa5780635c975abb146103ca57600080fd5b80633cb747bf146102e7578063485cc95514610314578063540abf731461033457600080fd5b80631532ec341161015e5780631532ec341461026a5780631635f5fd1461027d57806335e80ab31461029057600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b15610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610230333362030d406040518060200160405280600081525061056d565b005b600080fd5b34801561024357600080fd5b506102306102523660046126b1565b610580565b610230610265366004612762565b61099a565b6102306102783660046127b5565b610a71565b61023061028b3660046127b5565b610a85565b34801561029c57600080fd5b506032546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102f357600080fd5b506003546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032057600080fd5b5061023061032f366004612828565b610f4e565b34801561034057600080fd5b5061023061034f366004612861565b611137565b34801561036057600080fd5b5061039d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102de919061294e565b3480156103b657600080fd5b506102306103c5366004612961565b61117c565b3480156103d657600080fd5b506103df611250565b60405190151581526020016102de565b3480156103fb57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102bd565b34801561042657600080fd5b50610230610435366004612861565b6112e9565b34801561044657600080fd5b50610230610455366004612961565b61132e565b34801561046657600080fd5b50610492610475366004612828565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102de565b3480156104ac57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102bd565b6102306104d93660046129e4565b611402565b3480156104ea57600080fd5b506102306104f93660046126b1565b611444565b61023061050c366004612762565b611453565b34801561051d57600080fd5b506004546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b61023061054c3660046129e4565b611524565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61057a8484348585611567565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610653575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063b9190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b61070d611250565b15610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b61077d87611731565b156108cb5761078c8787611793565b61083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5050505061094d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610909908490612a93565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561094d9085856118b3565b610991878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061198792505050565b50505050505050565b333b15610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b505050565b610a7e8585858585610a85565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b58575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b610c12611250565b15610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b823414610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610209565b3073ffffffffffffffffffffffffffffffffffffffff851603610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610209565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610209565b610e9a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a1592505050565b6000610eb7855a8660405180602001604052806000815250611a88565b905080610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610209565b505050505050565b600054610100900460ff1615808015610f6e5750600054600160ff909116105b80610f885750303b158015610f88575060005460ff166001145b611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610209565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556110d083734200000000000000000000000000000000000010611aa2565b8015610a6c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b333b1561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190612aaa565b905090565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b333b156113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b61057a33858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61099187878787878787610580565b333b156114e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c33338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61057a3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b8234146115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610209565b61160285858584611ec6565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611665908b908b9086908a90602401612acc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116f892918890600401612b15565b6000604051808303818588803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b50505050505050505050565b600061175d827f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b8061178d575061178d827fec4fc8e300000000000000000000000000000000000000000000000000000000611f39565b92915050565b60006117bf837f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b15611868578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118339190612a47565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061178d565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a6c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f5c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b38686866040516119ff93929190612b5a565b60405180910390a4610f46868686868686612068565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611a74929190612b98565b60405180910390a361057a848484846120f0565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610209565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b611b9587611731565b15611ce357611ba48787611793565b611c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b50505050611d77565b611d0573ffffffffffffffffffffffffffffffffffffffff881686308661215d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611d43908490612bb1565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611d858787878787866121bb565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611de9908b908d908c908c908c908b90602401612bc9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611e7c92918790600401612b15565b600060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b5050505050505050505050565b61099187878787878787611b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051611f25929190612b98565b60405180910390a361057a84848484612249565b6000611f44836122a8565b8015611f555750611f55838361230c565b9392505050565b6000611fbe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123db9092919063ffffffff16565b805190915015610a6c5780806020019051810190611fdc9190612aaa565b610a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610209565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516120e093929190612b5a565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161214f929190612b98565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261057a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611905565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161223393929190612b5a565b60405180910390a4610f468686868686866123f2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161214f929190612b98565b60006122d4827f01ffc9a70000000000000000000000000000000000000000000000000000000061230c565b801561178d5750612305827fffffffff0000000000000000000000000000000000000000000000000000000061230c565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156123c4575060208210155b80156123d05750600081115b979650505050505050565b60606123ea848460008561246a565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516120e093929190612b5a565b6060824710156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610209565b73ffffffffffffffffffffffffffffffffffffffff85163b61257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610209565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a39190612c24565b60006040518083038185875af1925050503d80600081146125e0576040519150601f19603f3d011682016040523d82523d6000602084013e6125e5565b606091505b50915091506123d0828286606083156125ff575081611f55565b82511561260f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610209919061294e565b73ffffffffffffffffffffffffffffffffffffffff8116811461266557600080fd5b50565b60008083601f84011261267a57600080fd5b50813567ffffffffffffffff81111561269257600080fd5b6020830191508360208285010111156126aa57600080fd5b9250929050565b600080600080600080600060c0888a0312156126cc57600080fd5b87356126d781612643565b965060208801356126e781612643565b955060408801356126f781612643565b9450606088013561270781612643565b93506080880135925060a088013567ffffffffffffffff81111561272a57600080fd5b6127368a828b01612668565b989b979a50959850939692959293505050565b803563ffffffff8116811461275d57600080fd5b919050565b60008060006040848603121561277757600080fd5b61278084612749565b9250602084013567ffffffffffffffff81111561279c57600080fd5b6127a886828701612668565b9497909650939450505050565b6000806000806000608086880312156127cd57600080fd5b85356127d881612643565b945060208601356127e881612643565b935060408601359250606086013567ffffffffffffffff81111561280b57600080fd5b61281788828901612668565b969995985093965092949392505050565b6000806040838503121561283b57600080fd5b823561284681612643565b9150602083013561285681612643565b809150509250929050565b600080600080600080600060c0888a03121561287c57600080fd5b873561288781612643565b9650602088013561289781612643565b955060408801356128a781612643565b9450606088013593506128bc60808901612749565b925060a088013567ffffffffffffffff81111561272a57600080fd5b60005b838110156128f35781810151838201526020016128db565b8381111561057a5750506000910152565b6000815180845261291c8160208601602086016128d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f556020830184612904565b60008060008060008060a0878903121561297a57600080fd5b863561298581612643565b9550602087013561299581612643565b9450604087013593506129aa60608801612749565b9250608087013567ffffffffffffffff8111156129c657600080fd5b6129d289828a01612668565b979a9699509497509295939492505050565b600080600080606085870312156129fa57600080fd5b8435612a0581612643565b9350612a1360208601612749565b9250604085013567ffffffffffffffff811115612a2f57600080fd5b612a3b87828801612668565b95989497509550505050565b600060208284031215612a5957600080fd5b8151611f5581612643565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612aa557612aa5612a64565b500390565b600060208284031215612abc57600080fd5b81518015158114611f5557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612b0b6080830184612904565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612b446060830185612904565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612b8f6060830184612904565b95945050505050565b8281526040602082015260006123ea6040830184612904565b60008219821115612bc457612bc4612a64565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c1860c0830184612904565b98975050505050505050565b60008251612c368184602087016128d8565b919091019291505056fea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101795760003560e01c80637f46ddb2116100cb578063927ede2d1161007f578063b1a1a88211610059578063b1a1a882146104fe578063c89701a214610511578063e11013dd1461053e57600080fd5b8063927ede2d146104a05780639a2ac6d5146104cb578063a9f9e675146104de57600080fd5b806387087623116100b0578063870876231461043a5780638f601f661461045a57806391c49bf8146103ef57600080fd5b80637f46ddb2146103ef578063838b25201461041a57600080fd5b80633cb747bf1161012d57806354fd4d501161010757806354fd4d501461035457806358a997f6146103aa5780635c975abb146103ca57600080fd5b80633cb747bf146102e7578063485cc95514610314578063540abf731461033457600080fd5b80631532ec341161015e5780631532ec341461026a5780631635f5fd1461027d57806335e80ab31461029057600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b15610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610230333362030d406040518060200160405280600081525061056d565b005b600080fd5b34801561024357600080fd5b506102306102523660046126b1565b610580565b610230610265366004612762565b61099a565b6102306102783660046127b5565b610a71565b61023061028b3660046127b5565b610a85565b34801561029c57600080fd5b506032546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102f357600080fd5b506003546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032057600080fd5b5061023061032f366004612828565b610f4e565b34801561034057600080fd5b5061023061034f366004612861565b611137565b34801561036057600080fd5b5061039d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102de919061294e565b3480156103b657600080fd5b506102306103c5366004612961565b61117c565b3480156103d657600080fd5b506103df611250565b60405190151581526020016102de565b3480156103fb57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102bd565b34801561042657600080fd5b50610230610435366004612861565b6112e9565b34801561044657600080fd5b50610230610455366004612961565b61132e565b34801561046657600080fd5b50610492610475366004612828565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102de565b3480156104ac57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102bd565b6102306104d93660046129e4565b611402565b3480156104ea57600080fd5b506102306104f93660046126b1565b611444565b61023061050c366004612762565b611453565b34801561051d57600080fd5b506004546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b61023061054c3660046129e4565b611524565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61057a8484348585611567565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610653575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063b9190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b61070d611250565b15610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b61077d87611731565b156108cb5761078c8787611793565b61083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5050505061094d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610909908490612a93565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561094d9085856118b3565b610991878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061198792505050565b50505050505050565b333b15610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b505050565b610a7e8585858585610a85565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b58575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b610c12611250565b15610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b823414610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610209565b3073ffffffffffffffffffffffffffffffffffffffff851603610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610209565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610209565b610e9a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a1592505050565b6000610eb7855a8660405180602001604052806000815250611a88565b905080610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610209565b505050505050565b600054610100900460ff1615808015610f6e5750600054600160ff909116105b80610f885750303b158015610f88575060005460ff166001145b611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610209565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556110d083734200000000000000000000000000000000000010611aa2565b8015610a6c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b333b1561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190612aaa565b905090565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b333b156113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b61057a33858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61099187878787878787610580565b333b156114e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c33338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61057a3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b8234146115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610209565b61160285858584611ec6565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611665908b908b9086908a90602401612acc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116f892918890600401612b15565b6000604051808303818588803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b50505050505050505050565b600061175d827f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b8061178d575061178d827fec4fc8e300000000000000000000000000000000000000000000000000000000611f39565b92915050565b60006117bf837f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b15611868578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118339190612a47565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061178d565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a6c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f5c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b38686866040516119ff93929190612b5a565b60405180910390a4610f46868686868686612068565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611a74929190612b98565b60405180910390a361057a848484846120f0565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610209565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b611b9587611731565b15611ce357611ba48787611793565b611c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b50505050611d77565b611d0573ffffffffffffffffffffffffffffffffffffffff881686308661215d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611d43908490612bb1565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611d858787878787866121bb565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611de9908b908d908c908c908c908b90602401612bc9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611e7c92918790600401612b15565b600060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b5050505050505050505050565b61099187878787878787611b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051611f25929190612b98565b60405180910390a361057a84848484612249565b6000611f44836122a8565b8015611f555750611f55838361230c565b9392505050565b6000611fbe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123db9092919063ffffffff16565b805190915015610a6c5780806020019051810190611fdc9190612aaa565b610a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610209565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516120e093929190612b5a565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161214f929190612b98565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261057a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611905565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161223393929190612b5a565b60405180910390a4610f468686868686866123f2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161214f929190612b98565b60006122d4827f01ffc9a70000000000000000000000000000000000000000000000000000000061230c565b801561178d5750612305827fffffffff0000000000000000000000000000000000000000000000000000000061230c565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156123c4575060208210155b80156123d05750600081115b979650505050505050565b60606123ea848460008561246a565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516120e093929190612b5a565b6060824710156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610209565b73ffffffffffffffffffffffffffffffffffffffff85163b61257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610209565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a39190612c24565b60006040518083038185875af1925050503d80600081146125e0576040519150601f19603f3d011682016040523d82523d6000602084013e6125e5565b606091505b50915091506123d0828286606083156125ff575081611f55565b82511561260f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610209919061294e565b73ffffffffffffffffffffffffffffffffffffffff8116811461266557600080fd5b50565b60008083601f84011261267a57600080fd5b50813567ffffffffffffffff81111561269257600080fd5b6020830191508360208285010111156126aa57600080fd5b9250929050565b600080600080600080600060c0888a0312156126cc57600080fd5b87356126d781612643565b965060208801356126e781612643565b955060408801356126f781612643565b9450606088013561270781612643565b93506080880135925060a088013567ffffffffffffffff81111561272a57600080fd5b6127368a828b01612668565b989b979a50959850939692959293505050565b803563ffffffff8116811461275d57600080fd5b919050565b60008060006040848603121561277757600080fd5b61278084612749565b9250602084013567ffffffffffffffff81111561279c57600080fd5b6127a886828701612668565b9497909650939450505050565b6000806000806000608086880312156127cd57600080fd5b85356127d881612643565b945060208601356127e881612643565b935060408601359250606086013567ffffffffffffffff81111561280b57600080fd5b61281788828901612668565b969995985093965092949392505050565b6000806040838503121561283b57600080fd5b823561284681612643565b9150602083013561285681612643565b809150509250929050565b600080600080600080600060c0888a03121561287c57600080fd5b873561288781612643565b9650602088013561289781612643565b955060408801356128a781612643565b9450606088013593506128bc60808901612749565b925060a088013567ffffffffffffffff81111561272a57600080fd5b60005b838110156128f35781810151838201526020016128db565b8381111561057a5750506000910152565b6000815180845261291c8160208601602086016128d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f556020830184612904565b60008060008060008060a0878903121561297a57600080fd5b863561298581612643565b9550602087013561299581612643565b9450604087013593506129aa60608801612749565b9250608087013567ffffffffffffffff8111156129c657600080fd5b6129d289828a01612668565b979a9699509497509295939492505050565b600080600080606085870312156129fa57600080fd5b8435612a0581612643565b9350612a1360208601612749565b9250604085013567ffffffffffffffff811115612a2f57600080fd5b612a3b87828801612668565b95989497509550505050565b600060208284031215612a5957600080fd5b8151611f5581612643565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612aa557612aa5612a64565b500390565b600060208284031215612abc57600080fd5b81518015158114611f5557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612b0b6080830184612904565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612b446060830185612904565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612b8f6060830184612904565b95945050505050565b8281526040602082015260006123ea6040830184612904565b60008219821115612bc457612bc4612a64565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c1860c0830184612904565b98975050505050505050565b60008251612c368184602087016128d8565b919091019291505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", + "deployedCode": "0x60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -5383,7 +5399,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5391,7 +5407,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5399,7 +5415,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5407,7 +5423,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5415,7 +5431,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5423,7 +5439,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5431,7 +5447,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5439,7 +5455,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5447,7 +5463,23 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "isWrite": false, + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "reverted": false, + "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" + }, + { + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "isWrite": true, + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "reverted": false, + "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" + }, + { + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5455,7 +5487,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5463,7 +5495,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5471,7 +5503,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5479,7 +5511,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5487,7 +5519,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5495,7 +5527,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5524,7 +5556,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5538,7 +5570,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5550,7 +5582,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5564,7 +5596,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5576,7 +5608,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5590,7 +5622,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5602,7 +5634,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5616,7 +5648,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5628,7 +5660,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5642,7 +5674,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -6048,6 +6080,32 @@ ], "value": 0 }, + { + "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", + "account": "0x9568d36E291c2C4c34fa5593fcE73715abEf6F9c", + "chainInfo": { + "chainId": 31337, + "forkId": 0 + }, + "data": "0xf77a09bd", + "deployedCode": "0x", + "initialized": true, + "kind": "StaticCall", + "newBalance": 0, + "oldBalance": 0, + "reverted": false, + "storageAccesses": [ + { + "account": "0x9568d36E291c2C4c34fa5593fcE73715abEf6F9c", + "isWrite": false, + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "reverted": false, + "slot": "0x0000000000000000000000000000000000000000000000000000000000000047" + } + ], + "value": 0 + }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", "account": "0x9568d36E291c2C4c34fa5593fcE73715abEf6F9c", @@ -6211,7 +6269,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000003049623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002640bbb79680000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -6237,7 +6295,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048000000000000000000000000000000000000000000000000000000000000003049623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002640bbb79680000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -6303,7 +6361,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002640bbb79680000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -6337,7 +6395,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef286000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002640bbb79680000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef2860000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -6356,7 +6414,7 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -6366,12 +6424,12 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x0bbb79680000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000", + "data": "0x4c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -6680,8 +6738,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6690,7 +6748,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6723,8 +6781,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6733,7 +6791,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6801,8 +6859,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6811,7 +6869,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6879,8 +6937,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6889,7 +6947,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6957,8 +7015,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6967,7 +7025,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7035,8 +7093,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7045,7 +7103,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7113,8 +7171,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7123,7 +7181,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7191,8 +7249,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7201,7 +7259,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7269,8 +7327,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7279,7 +7337,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7347,8 +7405,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7357,7 +7415,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7399,8 +7457,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7409,7 +7467,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7451,8 +7509,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7461,7 +7519,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7503,8 +7561,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7513,7 +7571,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7555,8 +7613,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7565,7 +7623,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7607,8 +7665,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7617,7 +7675,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7659,8 +7717,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", - "previousValue": "0x000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00", + "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7669,7 +7727,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00", + "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7920,7 +7978,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc95500000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c7deee506487d083a370f8937583d779e75cc15100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -7946,7 +8004,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc95500000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c7deee506487d083a370f8937583d779e75cc15100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -8012,7 +8070,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc95500000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c7deee506487d083a370f8937583d779e75cc15100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8079,7 +8137,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", + "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8098,7 +8156,7 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", + "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -8113,7 +8171,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x485cc95500000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "data": "0xc0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8176,8 +8234,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", - "previousValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", + "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8186,12 +8244,12 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x485cc95500000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809", + "data": "0xc0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -8263,6 +8321,22 @@ "reverted": false, "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, + { + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "isWrite": false, + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "reverted": false, + "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" + }, + { + "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", + "isWrite": true, + "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "reverted": false, + "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" + }, { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, @@ -8392,8 +8466,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", - "previousValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", + "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8402,7 +8476,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8487,8 +8561,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", - "previousValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", + "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8497,7 +8571,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8591,8 +8665,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", - "previousValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", + "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8601,7 +8675,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8695,8 +8769,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", - "previousValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", + "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8705,7 +8779,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8799,8 +8873,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", - "previousValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", + "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8809,7 +8883,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8903,8 +8977,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", - "previousValue": "0x0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c", + "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8913,7 +8987,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x0Da314776B267D898dEE57F6Ede357ae28b3b83c", + "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9799,7 +9873,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x238181ae00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", + "data": "0x238181ae000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", "deployedCode": "0x", "initialized": true, "kind": "StaticCall", @@ -9813,7 +9887,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xa84149e805fd07fd65e6292517ce28bc2d9d17991b87a6d9c16e7c7cb921ab16" + "slot": "0x65635d553a05006bf1bf601b4d4bb550ad3933e29e3a72b8f33e9893aa07ab4a" }, { "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", @@ -9821,7 +9895,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xa84149e805fd07fd65e6292517ce28bc2d9d17991b87a6d9c16e7c7cb921ab16" + "slot": "0x65635d553a05006bf1bf601b4d4bb550ad3933e29e3a72b8f33e9893aa07ab4a" } ], "value": 0 @@ -10009,7 +10083,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af70300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10035,7 +10109,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000000e49623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af70300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -10101,7 +10175,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af70300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10200,7 +10274,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b2ea4bd000000000000000000000000000000000000000000000000000000000000004000000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", + "data": "0x9b2ea4bd0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10227,7 +10301,7 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": true, - "newValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", + "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" @@ -10242,7 +10316,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x485cc955000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d90", + "data": "0xc0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10287,8 +10361,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", - "previousValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", + "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10297,12 +10371,12 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x485cc955000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d90", + "data": "0xc0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -10390,6 +10464,22 @@ "reverted": false, "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, + { + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "isWrite": false, + "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "reverted": false, + "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" + }, + { + "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", + "isWrite": true, + "newValue": "0x0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4", + "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", + "reverted": false, + "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" + }, { "account": "0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D", "isWrite": false, @@ -10509,8 +10599,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", - "previousValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", + "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10519,7 +10609,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10586,8 +10676,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", - "previousValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", + "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10596,7 +10686,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10672,8 +10762,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", - "previousValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", + "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10682,7 +10772,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10758,8 +10848,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", - "previousValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", + "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10768,7 +10858,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10844,8 +10934,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", - "previousValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", + "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10854,7 +10944,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10930,8 +11020,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", - "previousValue": "0x00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f", + "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10940,7 +11030,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x71fA82Ea96672797954C28032b337aA40AAFC99f", + "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11005,7 +11095,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11031,7 +11121,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -11097,7 +11187,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11131,7 +11221,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef286000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef2860000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11150,7 +11240,7 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": true, - "newValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", + "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -11160,7 +11250,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11354,8 +11444,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", - "previousValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", + "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11364,7 +11454,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11440,8 +11530,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", - "previousValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", + "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11450,7 +11540,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11492,8 +11582,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", - "previousValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", + "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11502,7 +11592,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11544,8 +11634,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", - "previousValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", + "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11554,7 +11644,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11648,8 +11738,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", - "previousValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", + "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11658,7 +11748,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11752,8 +11842,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", - "previousValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", + "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11762,7 +11852,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11856,8 +11946,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", - "previousValue": "0x000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba", + "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11866,7 +11956,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xCEa36be2e9724d88cB107C552c602a8025DB88bA", + "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", "chainInfo": { "chainId": 31337, "forkId": 0 diff --git a/packages/contracts-bedrock/snapshots/storageLayout/L1CrossDomainMessenger.json b/packages/contracts-bedrock/snapshots/storageLayout/L1CrossDomainMessenger.json index cc9b5cfa86f..5c88be3ca9a 100644 --- a/packages/contracts-bedrock/snapshots/storageLayout/L1CrossDomainMessenger.json +++ b/packages/contracts-bedrock/snapshots/storageLayout/L1CrossDomainMessenger.json @@ -138,5 +138,12 @@ "offset": 0, "slot": "252", "type": "contract OptimismPortal" + }, + { + "bytes": "20", + "label": "systemConfig", + "offset": 0, + "slot": "253", + "type": "contract SystemConfig" } ] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/storageLayout/L1StandardBridge.json b/packages/contracts-bedrock/snapshots/storageLayout/L1StandardBridge.json index 48ec70c8b50..1ed5eac5d18 100644 --- a/packages/contracts-bedrock/snapshots/storageLayout/L1StandardBridge.json +++ b/packages/contracts-bedrock/snapshots/storageLayout/L1StandardBridge.json @@ -61,5 +61,12 @@ "offset": 0, "slot": "50", "type": "contract SuperchainConfig" + }, + { + "bytes": "20", + "label": "systemConfig", + "offset": 0, + "slot": "51", + "type": "contract SystemConfig" } ] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/storageLayout/OptimismPortal.json b/packages/contracts-bedrock/snapshots/storageLayout/OptimismPortal.json index 455fdf35877..54572285a45 100644 --- a/packages/contracts-bedrock/snapshots/storageLayout/OptimismPortal.json +++ b/packages/contracts-bedrock/snapshots/storageLayout/OptimismPortal.json @@ -75,5 +75,12 @@ "offset": 0, "slot": "55", "type": "contract SystemConfig" + }, + { + "bytes": "32", + "label": "_balance", + "offset": 0, + "slot": "56", + "type": "uint256" } ] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/storageLayout/WETH.json b/packages/contracts-bedrock/snapshots/storageLayout/WETH.json new file mode 100644 index 00000000000..ac5f38a75a0 --- /dev/null +++ b/packages/contracts-bedrock/snapshots/storageLayout/WETH.json @@ -0,0 +1,16 @@ +[ + { + "bytes": "32", + "label": "balanceOf", + "offset": 0, + "slot": "0", + "type": "mapping(address => uint256)" + }, + { + "bytes": "32", + "label": "allowance", + "offset": 0, + "slot": "1", + "type": "mapping(address => mapping(address => uint256))" + } +] \ No newline at end of file diff --git a/packages/contracts-bedrock/src/libraries/Predeploys.sol b/packages/contracts-bedrock/src/libraries/Predeploys.sol index bd36a7e7905..ed00c991ba5 100644 --- a/packages/contracts-bedrock/src/libraries/Predeploys.sol +++ b/packages/contracts-bedrock/src/libraries/Predeploys.sol @@ -95,7 +95,7 @@ library Predeploys { if (_addr == LEGACY_MESSAGE_PASSER) return "LegacyMessagePasser"; if (_addr == L1_MESSAGE_SENDER) return "L1MessageSender"; if (_addr == DEPLOYER_WHITELIST) return "DeployerWhitelist"; - if (_addr == WETH9) return "WETH9"; + if (_addr == WETH) return "WETH"; if (_addr == L2_CROSS_DOMAIN_MESSENGER) return "L2CrossDomainMessenger"; if (_addr == GAS_PRICE_ORACLE) return "GasPriceOracle"; if (_addr == L2_STANDARD_BRIDGE) return "L2StandardBridge"; @@ -120,12 +120,12 @@ library Predeploys { /// @notice Returns true if the predeploy is not proxied. function notProxied(address _addr) internal pure returns (bool) { - return _addr == GOVERNANCE_TOKEN || _addr == WETH9; + return _addr == GOVERNANCE_TOKEN || _addr == WETH; } /// @notice Returns true if the address is a defined predeploy that is embedded into new OP-Stack chains. function isSupportedPredeploy(address _addr) internal pure returns (bool) { - return _addr == LEGACY_MESSAGE_PASSER || _addr == DEPLOYER_WHITELIST || _addr == WETH9 + return _addr == LEGACY_MESSAGE_PASSER || _addr == DEPLOYER_WHITELIST || _addr == WETH || _addr == L2_CROSS_DOMAIN_MESSENGER || _addr == GAS_PRICE_ORACLE || _addr == L2_STANDARD_BRIDGE || _addr == SEQUENCER_FEE_WALLET || _addr == OPTIMISM_MINTABLE_ERC20_FACTORY || _addr == L1_BLOCK_NUMBER || _addr == L2_ERC721_BRIDGE || _addr == L1_BLOCK_ATTRIBUTES || _addr == L2_TO_L1_MESSAGE_PASSER diff --git a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol index 71db55696d9..2d3f2795bb2 100644 --- a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol @@ -16,6 +16,7 @@ import { Constants } from "src/libraries/Constants.sol"; import { L1CrossDomainMessenger } from "src/L1/L1CrossDomainMessenger.sol"; import { OptimismPortal } from "src/L1/OptimismPortal.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; +import { SystemConfig } from "src/L1/SystemConfig.sol"; contract L1CrossDomainMessenger_Test is Bridge_Initializer { /// @dev The receiver address @@ -619,6 +620,154 @@ contract L1CrossDomainMessenger_Test is Bridge_Initializer { assertTrue(l1CrossDomainMessenger.paused()); assertEq(l1CrossDomainMessenger.paused(), superchainConfig.paused()); } + + /// @dev Tests that gasPayingToken returns the correct values for ETH. + function test_gasPayingToken_ether_succeeds() external { + (address token, uint8 decimals) = l1CrossDomainMessenger.gasPayingToken(); + assertEq(token, address(Constants.ETHER)); + assertEq(decimals, 18); + } + + /// @dev Tests that gasPayingToken returns the correct values for non-ETH tokens. + function test_gasPayingToken_nonEther_succeeds() external { + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + (address token, uint8 decimals) = l1CrossDomainMessenger.gasPayingToken(); + assertEq(token, address(1)); + assertEq(decimals, 2); + } + + /// @dev Tests that isCustomGasToken returns the correct value for ETH as the gas token. + function test_isCustomGasToken_ether_succeeds() external { + assertFalse(l1CrossDomainMessenger.isCustomGasToken()); + } + + /// @dev Tests that isCustomGasToken returns the correct value for non-ETH as the gas token. + function test_isCustomGasToken_nonEther_succeeds() external { + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + assertTrue(l1CrossDomainMessenger.isCustomGasToken()); + } + + /// @dev Tests that sendMessage succeeds with a custom gas token when the call value is zero. + function test_sendMessage_customGasToken_noValue_succeeds() external { + // Mock the gasPayingToken function to return a custom gas token + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + assertTrue(l1CrossDomainMessenger.isCustomGasToken()); + + // deposit transaction on the optimism portal should be called + vm.expectCall( + address(optimismPortal), + abi.encodeWithSelector( + OptimismPortal.depositTransaction.selector, + Predeploys.L2_CROSS_DOMAIN_MESSENGER, + 0, + l1CrossDomainMessenger.baseGas(hex"ff", 100), + false, + Encoding.encodeCrossDomainMessage( + l1CrossDomainMessenger.messageNonce(), alice, recipient, 0, 100, hex"ff" + ) + ) + ); + + // TransactionDeposited event + vm.expectEmit(address(optimismPortal)); + emitTransactionDeposited( + AddressAliasHelper.applyL1ToL2Alias(address(l1CrossDomainMessenger)), + Predeploys.L2_CROSS_DOMAIN_MESSENGER, + 0, + 0, + l1CrossDomainMessenger.baseGas(hex"ff", 100), + false, + Encoding.encodeCrossDomainMessage(l1CrossDomainMessenger.messageNonce(), alice, recipient, 0, 100, hex"ff") + ); + + // SentMessage event + vm.expectEmit(address(l1CrossDomainMessenger)); + emit SentMessage(recipient, alice, hex"ff", l1CrossDomainMessenger.messageNonce(), 100); + + // SentMessageExtension1 event + vm.expectEmit(address(l1CrossDomainMessenger)); + emit SentMessageExtension1(alice, 0); + + vm.prank(alice); + l1CrossDomainMessenger.sendMessage(recipient, hex"ff", uint32(100)); + } + + /// @dev Tests that the sendMessage reverts when call value is non-zero with custom gas token. + function test_sendMessage_customGasToken_withValue_reverts() external { + // Mock the gasPayingToken function to return a custom gas token + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + assertTrue(l1CrossDomainMessenger.isCustomGasToken()); + + vm.expectRevert("CrossDomainMessenger: cannot send value with custom gas token"); + l1CrossDomainMessenger.sendMessage{ value: 1 }(recipient, hex"aa", uint32(500_000)); + } + + /// @dev Tests that the relayMessage succeeds with a custom gas token when the call value is zero. + function test_relayMessage_customGasToken_noValue_succeeds() external { + // Mock the gasPayingToken function to return a custom gas token + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + assertTrue(l1CrossDomainMessenger.isCustomGasToken()); + + address target = address(0xabcd); + address sender = Predeploys.L2_CROSS_DOMAIN_MESSENGER; + + vm.expectCall(target, hex"1111"); + + // set the value of op.l2Sender() to be the L2 Cross Domain Messenger. + vm.store(address(optimismPortal), bytes32(senderSlotIndex), bytes32(abi.encode(sender))); + vm.prank(address(optimismPortal)); + + vm.expectEmit(address(l1CrossDomainMessenger)); + + bytes32 hash = Hashing.hashCrossDomainMessage( + Encoding.encodeVersionedNonce({ _nonce: 0, _version: 1 }), sender, target, 0, 0, hex"1111" + ); + + emit RelayedMessage(hash); + + l1CrossDomainMessenger.relayMessage( + Encoding.encodeVersionedNonce({ _nonce: 0, _version: 1 }), // nonce + sender, + target, + 0, // value + 0, + hex"1111" + ); + + // the message hash is in the successfulMessages mapping + assert(l1CrossDomainMessenger.successfulMessages(hash)); + // it is not in the received messages mapping + assertEq(l1CrossDomainMessenger.failedMessages(hash), false); + } + + /// @dev Tests that the relayMessage reverts when call value is non-zero with custom gas token. + function test_relayMessage_customGasToken_withValue_reverts() external virtual { + // Mock the gasPayingToken function to return a custom gas token + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + assertTrue(l1CrossDomainMessenger.isCustomGasToken()); + vm.expectRevert("CrossDomainMessenger: cannot relay value with custom gas token"); + + l1CrossDomainMessenger.relayMessage{ value: 1 }( + Encoding.encodeVersionedNonce({ _nonce: 0, _version: 1 }), + address(0xabcd), + address(0xabcd), + 0, // value + 0, + hex"1111" + ); + } } /// @dev A regression test against a reentrancy vulnerability in the CrossDomainMessenger contract, which @@ -653,7 +802,9 @@ contract L1CrossDomainMessenger_ReinitReentryTest is Bridge_Initializer { vm.store(address(l1CrossDomainMessenger), 0, bytes32(uint256(0))); // call the initializer function - l1CrossDomainMessenger.initialize(SuperchainConfig(superchainConfig), OptimismPortal(optimismPortal)); + l1CrossDomainMessenger.initialize( + SuperchainConfig(superchainConfig), OptimismPortal(optimismPortal), SystemConfig(systemConfig) + ); // attempt to re-replay the withdrawal vm.expectEmit(address(l1CrossDomainMessenger)); diff --git a/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol b/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol index 6c9a15fd3f6..180587be0b6 100644 --- a/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol @@ -8,6 +8,7 @@ import { Bridge_Initializer } from "test/setup/Bridge_Initializer.sol"; // Libraries import { Predeploys } from "src/libraries/Predeploys.sol"; +import { Constants } from "src/libraries/Constants.sol"; // Target contract dependencies import { StandardBridge } from "src/universal/StandardBridge.sol"; @@ -27,6 +28,42 @@ contract L1StandardBridge_Getter_Test is Bridge_Initializer { assert(l1StandardBridge.OTHER_BRIDGE() == l2StandardBridge); assert(l1StandardBridge.messenger() == l1CrossDomainMessenger); assert(l1StandardBridge.MESSENGER() == l1CrossDomainMessenger); + assert(l1StandardBridge.superchainConfig() == superchainConfig); + assert(l1StandardBridge.systemConfig() == systemConfig); + (address token, uint8 decimals) = l1StandardBridge.gasPayingToken(); + (address expectedToken, uint8 expectedDecimals) = systemConfig.gasPayingToken(); + assert(token == expectedToken); + assert(decimals == expectedDecimals); + } + + /// @dev Tests that the `isCustomGasToken` function returns the correct value when the gas token is ether. + function test_isCustomGasToken_ether_succeeds() external { + assertFalse(l1StandardBridge.isCustomGasToken()); + } + + /// @dev Tests that the `isCustomGasToken` function returns the correct value when the gas token is not ether. + function test_isCustomGasToken_nonEther_succeeds() external { + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + assertTrue(l1StandardBridge.isCustomGasToken()); + } + + /// @dev Tests that gasPayingToken returns the correct values for ETH. + function test_gasPayingToken_ether_succeeds() external { + (address token, uint8 decimals) = l1StandardBridge.gasPayingToken(); + assertEq(token, Constants.ETHER); + assertEq(decimals, 18); + } + + /// @dev Tests that gasPayingToken returns the correct values for non-ETH tokens. + function test_gasPayingToken_nonEther_succeeds() external { + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + (address token, uint8 decimals) = l1StandardBridge.gasPayingToken(); + assertEq(token, address(1)); + assertEq(decimals, 2); } } @@ -42,6 +79,7 @@ contract L1StandardBridge_Initialize_Test is Bridge_Initializer { assertEq(address(impl.OTHER_BRIDGE()), Predeploys.L2_STANDARD_BRIDGE); assertEq(address(impl.otherBridge()), Predeploys.L2_STANDARD_BRIDGE); assertEq(address(l2StandardBridge), Predeploys.L2_STANDARD_BRIDGE); + assertEq(address(impl.systemConfig()), address(0)); } /// @dev Test that the initialize function sets the correct values. @@ -52,6 +90,11 @@ contract L1StandardBridge_Initialize_Test is Bridge_Initializer { assertEq(address(l1StandardBridge.OTHER_BRIDGE()), Predeploys.L2_STANDARD_BRIDGE); assertEq(address(l1StandardBridge.otherBridge()), Predeploys.L2_STANDARD_BRIDGE); assertEq(address(l2StandardBridge), Predeploys.L2_STANDARD_BRIDGE); + assertEq(address(l1StandardBridge.systemConfig()), address(systemConfig)); + (address token, uint8 decimals) = l1StandardBridge.gasPayingToken(); + (address expectedToken, uint8 expectedDecimals) = systemConfig.gasPayingToken(); + assertEq(token, expectedToken); + assertEq(decimals, expectedDecimals); } } @@ -185,36 +228,51 @@ contract L1StandardBridge_Receive_Test is Bridge_Initializer { } } -contract L1StandardBridge_Receive_TestFail { } +contract L1StandardBridge_Receive_TestFail is Bridge_Initializer { + /// @dev Tests receive function reverts with custom gas token. + function testFuzz_receive_customGasToken_reverts(uint256 _value) external { + vm.prank(alice, alice); + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + vm.deal(alice, _value); + (bool success, bytes memory data) = address(l1StandardBridge).call{ value: _value }(hex""); + assertFalse(success); + assembly { + data := add(data, 0x04) + } + assertEq(abi.decode(data, (string)), "StandardBridge: cannot bridge ETH with custom gas token"); + } +} contract PreBridgeETH is Bridge_Initializer { /// @dev Asserts the expected calls and events for bridging ETH depending /// on whether the bridge call is legacy or not. - function _preBridgeETH(bool isLegacy) internal { + function _preBridgeETH(bool isLegacy, uint256 value) internal { assertEq(address(optimismPortal).balance, 0); uint256 nonce = l1CrossDomainMessenger.messageNonce(); uint256 version = 0; // Internal constant in the OptimismPortal: DEPOSIT_VERSION address l1MessengerAliased = AddressAliasHelper.applyL1ToL2Alias(address(l1CrossDomainMessenger)); bytes memory message = - abi.encodeWithSelector(StandardBridge.finalizeBridgeETH.selector, alice, alice, 500, hex"dead"); + abi.encodeWithSelector(StandardBridge.finalizeBridgeETH.selector, alice, alice, value, hex"dead"); if (isLegacy) { vm.expectCall( address(l1StandardBridge), - 500, + value, abi.encodeWithSelector(l1StandardBridge.depositETH.selector, 50000, hex"dead") ); } else { vm.expectCall( address(l1StandardBridge), - 500, + value, abi.encodeWithSelector(l1StandardBridge.bridgeETH.selector, 50000, hex"dead") ); } vm.expectCall( address(l1CrossDomainMessenger), - 500, + value, abi.encodeWithSelector(CrossDomainMessenger.sendMessage.selector, address(l2StandardBridge), message, 50000) ); @@ -223,7 +281,7 @@ contract PreBridgeETH is Bridge_Initializer { nonce, address(l1StandardBridge), address(l2StandardBridge), - 500, + value, 50000, message ); @@ -231,24 +289,24 @@ contract PreBridgeETH is Bridge_Initializer { uint64 baseGas = l1CrossDomainMessenger.baseGas(message, 50000); vm.expectCall( address(optimismPortal), - 500, + value, abi.encodeWithSelector( OptimismPortal.depositTransaction.selector, address(l2CrossDomainMessenger), - 500, + value, baseGas, false, innerMessage ) ); - bytes memory opaqueData = abi.encodePacked(uint256(500), uint256(500), baseGas, false, innerMessage); + bytes memory opaqueData = abi.encodePacked(uint256(value), uint256(value), baseGas, false, innerMessage); vm.expectEmit(address(l1StandardBridge)); - emit ETHDepositInitiated(alice, alice, 500, hex"dead"); + emit ETHDepositInitiated(alice, alice, value, hex"dead"); vm.expectEmit(address(l1StandardBridge)); - emit ETHBridgeInitiated(alice, alice, 500, hex"dead"); + emit ETHBridgeInitiated(alice, alice, value, hex"dead"); // OptimismPortal emits a TransactionDeposited event on `depositTransaction` call vm.expectEmit(address(optimismPortal)); @@ -260,7 +318,7 @@ contract PreBridgeETH is Bridge_Initializer { // SentMessageExtension1 event emitted by the CrossDomainMessenger vm.expectEmit(address(l1CrossDomainMessenger)); - emit SentMessageExtension1(address(l1StandardBridge), 500); + emit SentMessageExtension1(address(l1StandardBridge), value); vm.prank(alice, alice); } @@ -273,12 +331,32 @@ contract L1StandardBridge_DepositETH_Test is PreBridgeETH { /// Only EOA can call depositETH. /// ETH ends up in the optimismPortal. function test_depositETH_succeeds() external { - _preBridgeETH({ isLegacy: true }); + _preBridgeETH({ isLegacy: true, value: 500 }); l1StandardBridge.depositETH{ value: 500 }(50000, hex"dead"); assertEq(address(optimismPortal).balance, 500); } } +contract L1StandardBridge_DepositETH_TestFail is Bridge_Initializer { + /// @dev Tests that depositing ETH reverts if the call is not from an EOA. + function test_depositETH_notEoa_reverts() external { + vm.etch(alice, address(L1Token).code); + vm.expectRevert("StandardBridge: function can only be called from an EOA"); + vm.prank(alice); + l1StandardBridge.depositETH{ value: 1 }(300, hex""); + } + + /// @dev Tests that depositing reverts with custom gas token. + function test_depositETH_customGasToken_reverts() external { + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + vm.prank(alice, alice); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + l1StandardBridge.depositETH(50000, hex"dead"); + } +} + contract L1StandardBridge_BridgeETH_Test is PreBridgeETH { /// @dev Tests that bridging ETH succeeds. /// Emits ETHDepositInitiated and ETHBridgeInitiated events. @@ -286,26 +364,29 @@ contract L1StandardBridge_BridgeETH_Test is PreBridgeETH { /// Only EOA can call bridgeETH. /// ETH ends up in the optimismPortal. function test_bridgeETH_succeeds() external { - _preBridgeETH({ isLegacy: false }); + _preBridgeETH({ isLegacy: false, value: 500 }); l1StandardBridge.bridgeETH{ value: 500 }(50000, hex"dead"); assertEq(address(optimismPortal).balance, 500); } } -contract L1StandardBridge_DepositETH_TestFail is Bridge_Initializer { - /// @dev Tests that depositing ETH reverts if the call is not from an EOA. - function test_depositETH_notEoa_reverts() external { - vm.etch(alice, address(L1Token).code); - vm.expectRevert("StandardBridge: function can only be called from an EOA"); - vm.prank(alice); - l1StandardBridge.depositETH{ value: 1 }(300, hex""); +contract L1StandardBridge_BridgeETH_TestFail is PreBridgeETH { + /// @dev Tests that bridging eth reverts with custom gas token. + function test_bridgeETH_customGasToken_reverts() external { + vm.prank(alice, alice); + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + + l1StandardBridge.bridgeETH(50000, hex"dead"); } } contract PreBridgeETHTo is Bridge_Initializer { /// @dev Asserts the expected calls and events for bridging ETH to a different /// address depending on whether the bridge call is legacy or not. - function _preBridgeETHTo(bool isLegacy) internal { + function _preBridgeETHTo(bool isLegacy, uint256 value) internal { assertEq(address(optimismPortal).balance, 0); uint256 nonce = l1CrossDomainMessenger.messageNonce(); uint256 version = 0; // Internal constant in the OptimismPortal: DEPOSIT_VERSION @@ -314,19 +395,19 @@ contract PreBridgeETHTo is Bridge_Initializer { if (isLegacy) { vm.expectCall( address(l1StandardBridge), - 600, + value, abi.encodeWithSelector(l1StandardBridge.depositETHTo.selector, bob, 60000, hex"dead") ); } else { vm.expectCall( address(l1StandardBridge), - 600, + value, abi.encodeWithSelector(l1StandardBridge.bridgeETHTo.selector, bob, 60000, hex"dead") ); } bytes memory message = - abi.encodeWithSelector(StandardBridge.finalizeBridgeETH.selector, alice, bob, 600, hex"dead"); + abi.encodeWithSelector(StandardBridge.finalizeBridgeETH.selector, alice, bob, value, hex"dead"); // the L1 bridge should call // L1CrossDomainMessenger.sendMessage @@ -340,7 +421,7 @@ contract PreBridgeETHTo is Bridge_Initializer { nonce, address(l1StandardBridge), address(l2StandardBridge), - 600, + value, 60000, message ); @@ -351,20 +432,20 @@ contract PreBridgeETHTo is Bridge_Initializer { abi.encodeWithSelector( OptimismPortal.depositTransaction.selector, address(l2CrossDomainMessenger), - 600, + value, baseGas, false, innerMessage ) ); - bytes memory opaqueData = abi.encodePacked(uint256(600), uint256(600), baseGas, false, innerMessage); + bytes memory opaqueData = abi.encodePacked(uint256(value), uint256(value), baseGas, false, innerMessage); vm.expectEmit(address(l1StandardBridge)); - emit ETHDepositInitiated(alice, bob, 600, hex"dead"); + emit ETHDepositInitiated(alice, bob, value, hex"dead"); vm.expectEmit(address(l1StandardBridge)); - emit ETHBridgeInitiated(alice, bob, 600, hex"dead"); + emit ETHBridgeInitiated(alice, bob, value, hex"dead"); // OptimismPortal emits a TransactionDeposited event on `depositTransaction` call vm.expectEmit(address(optimismPortal)); @@ -376,7 +457,7 @@ contract PreBridgeETHTo is Bridge_Initializer { // SentMessageExtension1 event emitted by the CrossDomainMessenger vm.expectEmit(address(l1CrossDomainMessenger)); - emit SentMessageExtension1(address(l1StandardBridge), 600); + emit SentMessageExtension1(address(l1StandardBridge), value); // deposit eth to bob vm.prank(alice, alice); @@ -390,12 +471,32 @@ contract L1StandardBridge_DepositETHTo_Test is PreBridgeETHTo { /// EOA or contract can call depositETHTo. /// ETH ends up in the optimismPortal. function test_depositETHTo_succeeds() external { - _preBridgeETHTo({ isLegacy: true }); + _preBridgeETHTo({ isLegacy: true, value: 600 }); l1StandardBridge.depositETHTo{ value: 600 }(bob, 60000, hex"dead"); assertEq(address(optimismPortal).balance, 600); } } +contract L1StandardBridge_DepositETHTo_TestFail is Bridge_Initializer { + /// @dev Tests that depositETHTo reverts with custom gas token. + function testFuzz_depositETHTo_customGasToken_reverts( + uint256 _value, + address _to, + uint32 _minGasLimit, + bytes calldata _extraData + ) + external + { + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + vm.deal(address(this), _value); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + + l1StandardBridge.depositETHTo{ value: _value }(_to, _minGasLimit, _extraData); + } +} + contract L1StandardBridge_BridgeETHTo_Test is PreBridgeETHTo { /// @dev Tests that bridging ETH to a different address succeeds. /// Emits ETHDepositInitiated and ETHBridgeInitiated events. @@ -403,13 +504,30 @@ contract L1StandardBridge_BridgeETHTo_Test is PreBridgeETHTo { /// Only EOA can call bridgeETHTo. /// ETH ends up in the optimismPortal. function test_bridgeETHTo_succeeds() external { - _preBridgeETHTo({ isLegacy: false }); + _preBridgeETHTo({ isLegacy: false, value: 600 }); l1StandardBridge.bridgeETHTo{ value: 600 }(bob, 60000, hex"dead"); assertEq(address(optimismPortal).balance, 600); } } -contract L1StandardBridge_DepositETHTo_TestFail is Bridge_Initializer { } +contract L1StandardBridge_BridgeETHTo_TestFail is PreBridgeETHTo { + /// @dev Tests that bridging reverts with custom gas token. + function testFuzz_bridgeETHTo_customGasToken_reverts( + uint256 _value, + uint32 _minGasLimit, + bytes calldata _extraData + ) + external + { + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + vm.deal(address(this), _value); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + + l1StandardBridge.bridgeETHTo{ value: _value }(bob, _minGasLimit, _extraData); + } +} contract L1StandardBridge_DepositERC20_Test is Bridge_Initializer { using stdStorage for StdStorage; @@ -627,7 +745,29 @@ contract L1StandardBridge_FinalizeETHWithdrawal_Test is Bridge_Initializer { } } -contract L1StandardBridge_FinalizeETHWithdrawal_TestFail is Bridge_Initializer { } +contract L1StandardBridge_FinalizeETHWithdrawal_TestFail is Bridge_Initializer { + /// @dev Tests that finalizeETHWithdrawal reverts with custom gas token. + function testFuzz_finalizeETHWithdrawal_customGasToken_reverts( + uint256 _value, + bytes calldata _extraData + ) + external + { + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + vm.mockCall( + address(l1StandardBridge.messenger()), + abi.encodeWithSelector(CrossDomainMessenger.xDomainMessageSender.selector), + abi.encode(address(l1StandardBridge.OTHER_BRIDGE())) + ); + vm.deal(address(l1StandardBridge.messenger()), _value); + vm.prank(address(l1StandardBridge.messenger())); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + + l1StandardBridge.finalizeETHWithdrawal{ value: _value }(alice, alice, _value, _extraData); + } +} contract L1StandardBridge_FinalizeERC20Withdrawal_Test is Bridge_Initializer { using stdStorage for StdStorage; @@ -714,6 +854,23 @@ contract L1StandardBridge_FinalizeBridgeETH_Test is Bridge_Initializer { } contract L1StandardBridge_FinalizeBridgeETH_TestFail is Bridge_Initializer { + /// @dev Tests that finalizing bridged reverts with custom gas token. + function testFuzz_finalizeBridgeETH_customGasToken_reverts(uint256 _value, bytes calldata _extraData) external { + vm.mockCall( + address(l1StandardBridge.messenger()), + abi.encodeWithSelector(CrossDomainMessenger.xDomainMessageSender.selector), + abi.encode(address(l1StandardBridge.OTHER_BRIDGE())) + ); + vm.deal(address(l1CrossDomainMessenger), _value); + vm.prank(address(l1CrossDomainMessenger)); + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + + l1StandardBridge.finalizeBridgeETH{ value: _value }(alice, alice, _value, _extraData); + } + /// @dev Tests that finalizing bridged ETH reverts if the amount is incorrect. function test_finalizeBridgeETH_incorrectValue_reverts() external { address messenger = address(l1StandardBridge.messenger()); diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index 5bf2c6ee1e8..7aa8fc4178c 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -20,7 +20,12 @@ import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol"; import { L2OutputOracle } from "src/L1/L2OutputOracle.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; +import { L1Block } from "src/L2/L1Block.sol"; +import { Predeploys } from "src/libraries/Predeploys.sol"; import { OptimismPortal } from "src/L1/OptimismPortal.sol"; +import { GasPayingToken } from "src/libraries/GasPayingToken.sol"; +import { MockERC20 } from "solmate/test/utils/mocks/MockERC20.sol"; +import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol"; import "src/libraries/PortalErrors.sol"; contract OptimismPortal_Test is CommonTest { @@ -63,6 +68,10 @@ contract OptimismPortal_Test is CommonTest { assertEq(prevBaseFee, 1 gwei); assertEq(prevBoughtGas, 0); assertEq(prevBlockNum, uint64(block.number)); + (address token, uint8 decimals) = optimismPortal.gasPayingToken(); + (address expectedToken, uint8 expectedDecimals) = systemConfig.gasPayingToken(); + assertEq(token, expectedToken); + assertEq(decimals, expectedDecimals); } /// @dev Tests that `pause` successfully pauses @@ -148,6 +157,102 @@ contract OptimismPortal_Test is CommonTest { assertEq(address(optimismPortal).balance, _value); } + /// @notice Helper function for depositing a transaction. + function depositTransaction( + address _from, + address _to, + uint256 _mint, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + internal + { + if (_isCreation) { + _to = address(0); + } + vm.assume(_data.length <= 120_000); + ResourceMetering.ResourceConfig memory rcfg = systemConfig.resourceConfig(); + _gasLimit = + uint64(bound(_gasLimit, optimismPortal.minimumGasLimit(uint64(_data.length)), rcfg.maxResourceLimit)); + + uint256 prevBalance = address(optimismPortal).balance; + + // Ensure that no custom gas token is set + (address gasPayingToken,) = optimismPortal.gasPayingToken(); + assertEq(gasPayingToken, Constants.ETHER); + + bytes memory opaqueData = abi.encodePacked(_mint, _value, _gasLimit, _isCreation, _data); + + vm.expectEmit(address(optimismPortal)); + emit TransactionDeposited( + _from, // from + _to, + uint256(0), // DEPOSIT_VERSION + opaqueData + ); + + vm.deal(address(this), _mint); + + // Deposit the token into the portal + optimismPortal.depositTransaction{ value: _mint }(_to, _value, _gasLimit, _isCreation, _data); + + // Assert final balance equals the deposited amount + assertEq(address(optimismPortal).balance, _mint + prevBalance); + assertEq(optimismPortal.balance(), _mint + prevBalance); + } + + /// @dev Tests that `depositTransaction` succeeds when msg.sender == tx.origin and non-custom gas is used. + function testFuzz_depositTransaction_senderIsOrigin_succeeds( + address _to, + uint256 _mint, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + external + { + // Ensure that msg.sender == tx.origin + vm.startPrank(address(this), address(this)); + + depositTransaction({ + _from: address(this), + _to: _to, + _mint: _mint, + _value: _value, + _gasLimit: _gasLimit, + _isCreation: _isCreation, + _data: _data + }); + } + + /// @dev Tests that `depositTransaction` succeeds when msg.sender != tx.origin and non-custom gas is used. + function testFuzz_depositTransaction_senderNotOrigin_succeeds( + address _to, + uint256 _mint, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + external + { + // Ensure that msg.sender != tx.origin + vm.startPrank(address(this), address(1)); + + depositTransaction({ + _from: AddressAliasHelper.applyL1ToL2Alias(address(this)), + _to: _to, + _mint: _mint, + _value: _value, + _gasLimit: _gasLimit, + _isCreation: _isCreation, + _data: _data + }); + } + /// @dev Tests that `depositTransaction` reverts when the destination address is non-zero /// for a contract creation deposit. function test_depositTransaction_contractCreation_reverts() external { @@ -160,6 +265,8 @@ contract OptimismPortal_Test is CommonTest { /// This places an upper bound on unsafe blocks sent over p2p. function test_depositTransaction_largeData_reverts() external { uint256 size = 120_001; + + // Call minimumGasLimit(0) before vm.expectRevert to ensure vm.expectRevert is for depositERC20Transaction uint64 gasLimit = optimismPortal.minimumGasLimit(uint64(size)); vm.expectRevert(LargeCalldata.selector); optimismPortal.depositTransaction({ @@ -340,6 +447,79 @@ contract OptimismPortal_Test is CommonTest { vm.expectRevert(stdError.indexOOBError); assertEq(optimismPortal.isOutputFinalized(nextOutputIndex + 1), false); } + + /// @dev Tests that gasPayingToken returns the correct values for ETH. + function test_gasPayingToken_ether_succeeds() external { + (address token, uint8 decimals) = optimismPortal.gasPayingToken(); + assertEq(token, Constants.ETHER); + assertEq(decimals, 18); + } + + /// @dev Tests that gasPayingToken returns the correct values for non-ETH tokens. + function test_gasPayingToken_nonEther_succeeds() external { + vm.mockCall( + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + ); + (address token, uint8 decimals) = optimismPortal.gasPayingToken(); + assertEq(token, address(1)); + assertEq(decimals, 2); + } + + /// @dev Tests that the gas paying token can be set. + function testFuzz_setGasPayingToken_succeeds( + address _token, + uint8 _decimals, + bytes32 _name, + bytes32 _symbol + ) + external + { + vm.expectEmit(address(optimismPortal)); + emit TransactionDeposited( + 0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001, + Predeploys.L1_BLOCK_ATTRIBUTES, + 0, + abi.encodePacked( + uint256(0), // mint + uint256(0), // value + uint64(80000), // gasLimit + false, // isCreation, + abi.encodeCall(L1Block.setGasPayingToken, (_token, _decimals, _name, _symbol)) + ) + ); + + vm.prank(address(systemConfig)); + optimismPortal.setGasPayingToken({ _token: _token, _decimals: _decimals, _name: _name, _symbol: _symbol }); + } + + /// @dev Tests that the gas paying token cannot be set by a non-system config. + function test_setGasPayingToken_notSystemConfig_fails() external { + vm.expectRevert(Unauthorized.selector); + optimismPortal.setGasPayingToken({ _token: address(0), _decimals: 0, _name: "", _symbol: "" }); + } + + /// @dev Tests that `depositERC20Transaction` reverts when the gas paying token is ether. + function test_depositERC20Transaction_noCustomGasToken_reverts() external { + // Check that the gas paying token is set to ether + (address token,) = optimismPortal.gasPayingToken(); + assertEq(token, Constants.ETHER); + + vm.expectRevert(OnlyCustomGasToken.selector); + optimismPortal.depositERC20Transaction(address(0), 0, 0, 0, false, ""); + } + + /// @dev Tests that `balance()` returns the correct balance when the gas paying token is ether. + function testFuzz_balance_ether_succeeds(uint256 _amount) external { + // Check that the gas paying token is set to ether + (address token,) = optimismPortal.gasPayingToken(); + assertEq(token, Constants.ETHER); + + // Increase the balance of the gas paying token + vm.deal(address(optimismPortal), _amount); + + // Check that the balance has been correctly updated + assertEq(optimismPortal.balance(), address(optimismPortal).balance); + } } contract OptimismPortal_FinalizeWithdrawal_Test is CommonTest { @@ -364,7 +544,7 @@ contract OptimismPortal_FinalizeWithdrawal_Test is CommonTest { target: bob, value: 100, gasLimit: 100_000, - data: hex"" + data: hex"aa" }); // Get withdrawal proof data we can use for testing. (_stateRoot, _storageRoot, _outputRoot, _withdrawalHash, _withdrawalProof) = @@ -382,7 +562,7 @@ contract OptimismPortal_FinalizeWithdrawal_Test is CommonTest { } /// @dev Setup the system for a ready-to-use state. - function setUp() public override { + function setUp() public virtual override { // Configure the oracle to return the output root we've prepared. vm.warp(l2OutputOracle.computeL2Timestamp(_proposedBlockNumber) + 1); vm.prank(l2OutputOracle.PROPOSER()); @@ -544,7 +724,7 @@ contract OptimismPortal_FinalizeWithdrawal_Test is CommonTest { } /// @dev Tests that `finalizeWithdrawalTransaction` succeeds. - function test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() external { + function test_finalizeWithdrawalTransaction_provenWithdrawalHash_ether_succeeds() external { uint256 bobBalanceBefore = address(bob).balance; vm.expectEmit(true, true, true, true); @@ -556,7 +736,23 @@ contract OptimismPortal_FinalizeWithdrawal_Test is CommonTest { emit WithdrawalFinalized(_withdrawalHash, true); optimismPortal.finalizeWithdrawalTransaction(_defaultTx); - assert(address(bob).balance == bobBalanceBefore + 100); + assertEq(address(bob).balance, bobBalanceBefore + 100); + } + + /// @dev Tests that `finalizeWithdrawalTransaction` succeeds. + function test_finalizeWithdrawalTransaction_provenWithdrawalHash_nonEther_targetToken_reverts() external { + vm.mockCall( + address(systemConfig), + abi.encodeWithSignature("gasPayingToken()"), + abi.encode(address(_defaultTx.target), 18) + ); + + optimismPortal.proveWithdrawalTransaction(_defaultTx, _proposedOutputIndex, _outputRootProof, _withdrawalProof); + + vm.warp(block.timestamp + l2OutputOracle.FINALIZATION_PERIOD_SECONDS() + 1); + + vm.expectRevert(BadTarget.selector); + optimismPortal.finalizeWithdrawalTransaction(_defaultTx); } /// @dev Tests that `finalizeWithdrawalTransaction` reverts if the contract is paused. @@ -1023,3 +1219,327 @@ contract OptimismPortalResourceFuzz_Test is CommonTest { }); } } + +contract OptimismPortalWithMockERC20_Test is OptimismPortal_FinalizeWithdrawal_Test { + MockERC20 token; + + function setUp() public override { + super.setUp(); + token = new MockERC20("Test", "TST", 18); + } + + function depositERC20Transaction( + address _from, + address _to, + uint256 _mint, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + internal + { + if (_isCreation) { + _to = address(0); + } + vm.assume(_data.length <= 120_000); + ResourceMetering.ResourceConfig memory rcfg = systemConfig.resourceConfig(); + _gasLimit = + uint64(bound(_gasLimit, optimismPortal.minimumGasLimit(uint64(_data.length)), rcfg.maxResourceLimit)); + + // Mint the token to the contract and approve the token for the portal + token.mint(address(this), _mint); + token.approve(address(optimismPortal), _mint); + + // Mock the gas paying token to be the ERC20 token + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); + + bytes memory opaqueData = abi.encodePacked(_mint, _value, _gasLimit, _isCreation, _data); + + vm.expectEmit(address(optimismPortal)); + emit TransactionDeposited( + _from, // from + _to, + uint256(0), // DEPOSIT_VERSION + opaqueData + ); + + // Deposit the token into the portal + optimismPortal.depositERC20Transaction(_to, _mint, _value, _gasLimit, _isCreation, _data); + + // Assert final balance equals the deposited amount + assertEq(token.balanceOf(address(optimismPortal)), _mint); + assertEq(optimismPortal.balance(), _mint); + } + + /// @dev Tests that `depositERC20Transaction` succeeds when msg.sender == tx.origin. + function testFuzz_depositERC20Transaction_senderIsOrigin_succeeds( + address _to, + uint256 _mint, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + external + { + // Ensure that msg.sender == tx.origin + vm.startPrank(address(this), address(this)); + + depositERC20Transaction({ + _from: address(this), + _to: _to, + _mint: _mint, + _value: _value, + _gasLimit: _gasLimit, + _isCreation: _isCreation, + _data: _data + }); + } + + /// @dev Tests that `depositERC20Transaction` succeeds when msg.sender != tx.origin. + function testFuzz_depositERC20Transaction_senderNotOrigin_succeeds( + address _to, + uint256 _mint, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + external + { + // Ensure that msg.sender != tx.origin + vm.startPrank(address(this), address(1)); + + depositERC20Transaction({ + _from: AddressAliasHelper.applyL1ToL2Alias(address(this)), + _to: _to, + _mint: _mint, + _value: _value, + _gasLimit: _gasLimit, + _isCreation: _isCreation, + _data: _data + }); + } + + /// @dev Tests that `depositERC20Transaction` reverts when not enough of the token is approved. + function test_depositERC20Transaction_notEnoughAmount_reverts() external { + // Mock the gas paying token to be the ERC20 token + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); + vm.expectRevert(); + + // Deposit the token into the portal + optimismPortal.depositERC20Transaction(address(0), 1, 0, 0, false, ""); + } + + /// @dev Tests that `depositERC20Transaction` reverts when token balance does not update correctly after transfer. + function test_depositERC20Transaction_incorrectTokenBalance_reverts() external { + // Mint the token to the contract and approve the token for the portal + token.mint(address(this), 100); + token.approve(address(optimismPortal), 100); + + // Mock the gas paying token to be the ERC20 token + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); + + // Mock the token balance + vm.mockCall( + address(token), abi.encodeWithSelector(token.balanceOf.selector, address(optimismPortal)), abi.encode(0) + ); + + // Call minimumGasLimit(0) before vm.expectRevert to ensure vm.expectRevert is for depositERC20Transaction + uint64 gasLimit = optimismPortal.minimumGasLimit(0); + + vm.expectRevert(TransferFailed.selector); + + // Deposit the token into the portal + optimismPortal.depositERC20Transaction(address(1), 100, 0, gasLimit, false, ""); + } + + /// @dev Tests that `depositERC20Transaction` reverts when creating a contract with a non-zero target. + function test_depositERC20Transaction_isCreationNotZeroTarget_reverts() external { + // Mock the gas paying token to be the ERC20 token + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); + + // Call minimumGasLimit(0) before vm.expectRevert to ensure vm.expectRevert is for depositERC20Transaction + uint64 gasLimit = optimismPortal.minimumGasLimit(0); + + vm.expectRevert(BadTarget.selector); + // Deposit the token into the portal + optimismPortal.depositERC20Transaction(address(1), 0, 0, gasLimit, true, ""); + } + + /// @dev Tests that `depositERC20Transaction` reverts when the gas limit is too low. + function test_depositERC20Transaction_gasLimitTooLow_reverts() external { + // Mock the gas paying token to be the ERC20 token + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); + + vm.expectRevert(SmallGasLimit.selector); + // Deposit the token into the portal + optimismPortal.depositERC20Transaction(address(0), 0, 0, 0, false, ""); + } + + /// @dev Tests that `depositERC20Transaction` reverts when the data is too large. + function test_depositERC20Transaction_dataTooLarge_reverts() external { + bytes memory data = new bytes(120_001); + data[120_000] = 0x01; + + // Mock the gas paying token to be the ERC20 token + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); + + // Call minimumGasLimit(0) before vm.expectRevert to ensure vm.expectRevert is for depositERC20Transaction + uint64 gasLimit = optimismPortal.minimumGasLimit(120_001); + + vm.expectRevert(LargeCalldata.selector); + // Deposit the token into the portal + optimismPortal.depositERC20Transaction(address(0), 0, 0, gasLimit, false, data); + } + + /// @dev Tests that `balance()` returns the correct balance when the gas paying token is not ether. + function testFuzz_balance_nonEther_succeeds(uint256 _amount) external { + // Mint the token to the contract and approve the token for the portal + token.mint(address(this), _amount); + token.approve(address(optimismPortal), _amount); + + // Mock the gas paying token to be the ERC20 token + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); + + // Deposit the token into the portal + optimismPortal.depositERC20Transaction(address(0), _amount, 0, optimismPortal.minimumGasLimit(0), false, ""); + + // Check that the balance has been correctly updated + assertEq(optimismPortal.balance(), _amount); + } + + /// @dev Tests that `finalizeWithdrawalTransaction` succeeds. + function test_finalizeWithdrawalTransaction_provenWithdrawalHash_nonEther_succeeds() external { + // Mint the token to the contract and approve the token for the portal + token.mint(address(this), _defaultTx.value); + token.approve(address(optimismPortal), _defaultTx.value); + + // Mock the gas paying token to be the ERC20 token + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); + + // Deposit the token into the portal + optimismPortal.depositERC20Transaction( + address(bob), _defaultTx.value, 0, optimismPortal.minimumGasLimit(0), false, "" + ); + + assertEq(optimismPortal.balance(), _defaultTx.value); + + vm.expectEmit(true, true, true, true); + emit WithdrawalProven(_withdrawalHash, alice, bob); + optimismPortal.proveWithdrawalTransaction(_defaultTx, _proposedOutputIndex, _outputRootProof, _withdrawalProof); + + vm.warp(block.timestamp + l2OutputOracle.FINALIZATION_PERIOD_SECONDS() + 1); + vm.expectEmit(true, true, false, true); + emit WithdrawalFinalized(_withdrawalHash, true); + + vm.expectCall(_defaultTx.target, 0, _defaultTx.data); + + vm.expectCall( + address(token), 0, abi.encodeWithSelector(token.transfer.selector, _defaultTx.target, _defaultTx.value) + ); + + optimismPortal.finalizeWithdrawalTransaction(_defaultTx); + + assertEq(optimismPortal.balance(), 0); + assertEq(token.balanceOf(address(bob)), 100); + } + + /// @dev Helper for depositing a transaction. + function depositTransaction( + address _from, + address _to, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + internal + { + if (_isCreation) { + _to = address(0); + } + vm.assume(_data.length <= 120_000); + ResourceMetering.ResourceConfig memory rcfg = systemConfig.resourceConfig(); + _gasLimit = + uint64(bound(_gasLimit, optimismPortal.minimumGasLimit(uint64(_data.length)), rcfg.maxResourceLimit)); + + // Mock the gas paying token to be the ERC20 token + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); + + bytes memory opaqueData = abi.encodePacked(uint256(0), _value, _gasLimit, _isCreation, _data); + + vm.expectEmit(address(optimismPortal)); + emit TransactionDeposited( + _from, // from + _to, + uint256(0), // DEPOSIT_VERSION + opaqueData + ); + + // Deposit the token into the portal + optimismPortal.depositTransaction(_to, _value, _gasLimit, _isCreation, _data); + + // Assert final balance equals the deposited amount + assertEq(token.balanceOf(address(optimismPortal)), 0); + assertEq(optimismPortal.balance(), 0); + } + + /// @dev Tests that `depositTransaction` succeeds when a custom gas token is used but the msg.value is zero. + function testFuzz_depositTransaction_customGasToken_noValue_senderIsOrigin_succeeds( + address _to, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + external + { + // Ensure that msg.sender == tx.origin + vm.startPrank(address(this), address(this)); + + depositTransaction({ + _from: address(this), + _to: _to, + _value: _value, + _gasLimit: _gasLimit, + _isCreation: _isCreation, + _data: _data + }); + } + + /// @dev Tests that `depositTransaction` succeeds when a custom gas token is used but the msg.value is zero. + function testFuzz_depositTransaction_customGasToken_noValue_senderNotOrigin_succeeds( + address _to, + uint256 _value, + uint64 _gasLimit, + bool _isCreation, + bytes memory _data + ) + external + { + // Ensure that msg.sender != tx.origin + vm.startPrank(address(this), address(1)); + + depositTransaction({ + _from: AddressAliasHelper.applyL1ToL2Alias(address(this)), + _to: _to, + _value: _value, + _gasLimit: _gasLimit, + _isCreation: _isCreation, + _data: _data + }); + } + + /// @dev Tests that `depositTransaction` fails when a custom gas token is used and msg.value is non-zero. + function test_depositTransaction_customGasToken_withValue_reverts() external { + // Mock the gas paying token to be the ERC20 token + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); + + vm.expectRevert(NoValue.selector); + + // Deposit the token into the portal + optimismPortal.depositTransaction{ value: 100 }(address(0), 0, 0, false, ""); + } +} diff --git a/packages/contracts-bedrock/test/L1/ResourceMetering.t.sol b/packages/contracts-bedrock/test/L1/ResourceMetering.t.sol index 2291b32c061..63b208b9c25 100644 --- a/packages/contracts-bedrock/test/L1/ResourceMetering.t.sol +++ b/packages/contracts-bedrock/test/L1/ResourceMetering.t.sol @@ -203,6 +203,16 @@ contract ResourceMetering_Test is Test { vm.roll(initialBlockNum + _blockDiff); meter.use(_amount); } + + function testFuzz_meter_useGas_succeeds(uint64 _amount) external { + (, uint64 prevBoughtGas,) = meter.params(); + vm.assume(prevBoughtGas + _amount <= meter.resourceConfig().maxResourceLimit); + + meter.use(_amount); + + (, uint64 postPrevBoughtGas,) = meter.params(); + assertEq(postPrevBoughtGas, prevBoughtGas + _amount); + } } /// @title CustomMeterUser diff --git a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol index 14457e2f6d9..4e537c823e6 100644 --- a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol @@ -3,14 +3,18 @@ pragma solidity 0.8.15; // Testing utilities import { CommonTest } from "test/setup/CommonTest.sol"; +import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; // Libraries import { Constants } from "src/libraries/Constants.sol"; import { EIP1967Helper } from "test/mocks/EIP1967Helper.sol"; +import { Predeploys } from "src/libraries/Predeploys.sol"; // Target contract dependencies import { ResourceMetering } from "src/L1/ResourceMetering.sol"; import { Proxy } from "src/universal/Proxy.sol"; +import { L1Block } from "src/L2/L1Block.sol"; +import { GasPayingToken } from "src/libraries/GasPayingToken.sol"; // Target contract import { SystemConfig } from "src/L1/SystemConfig.sol"; @@ -68,6 +72,10 @@ contract SystemConfig_Initialize_Test is SystemConfig_Init { assertEq(address(impl.disputeGameFactory()), address(0)); assertEq(address(impl.optimismPortal()), address(0)); assertEq(address(impl.optimismMintableERC20Factory()), address(0)); + // Check gas paying token + (address token, uint8 decimals) = impl.gasPayingToken(); + assertEq(token, Constants.ETHER); + assertEq(decimals, 18); } /// @dev Tests that initailization sets the correct values. @@ -98,6 +106,10 @@ contract SystemConfig_Initialize_Test is SystemConfig_Init { assertEq(address(systemConfig.disputeGameFactory()), address(disputeGameFactory)); assertEq(address(systemConfig.optimismPortal()), address(optimismPortal)); assertEq(address(systemConfig.optimismMintableERC20Factory()), address(optimismMintableERC20Factory)); + // Check gas paying token + (address token, uint8 decimals) = systemConfig.gasPayingToken(); + assertEq(token, Constants.ETHER); + assertEq(decimals, 18); } } @@ -128,7 +140,8 @@ contract SystemConfig_Initialize_TestFail is SystemConfig_Initialize_Test { l1StandardBridge: address(0), disputeGameFactory: address(0), optimismPortal: address(0), - optimismMintableERC20Factory: address(0) + optimismMintableERC20Factory: address(0), + gasPayingToken: Constants.ETHER }) }); } @@ -157,7 +170,8 @@ contract SystemConfig_Initialize_TestFail is SystemConfig_Initialize_Test { l1StandardBridge: address(0), disputeGameFactory: address(0), optimismPortal: address(0), - optimismMintableERC20Factory: address(0) + optimismMintableERC20Factory: address(0), + gasPayingToken: Constants.ETHER }) }); assertEq(systemConfig.startBlock(), block.number); @@ -187,13 +201,171 @@ contract SystemConfig_Initialize_TestFail is SystemConfig_Initialize_Test { l1StandardBridge: address(0), disputeGameFactory: address(0), optimismPortal: address(0), - optimismMintableERC20Factory: address(0) + optimismMintableERC20Factory: address(0), + gasPayingToken: Constants.ETHER }) }); assertEq(systemConfig.startBlock(), 1); } } +contract SystemConfig_Init_CustomGasToken is SystemConfig_Init { + ERC20 token; + + function setUp() public override { + token = new ERC20("Silly", "SIL"); + super.enableCustomGasToken(address(token)); + super.setUp(); + } + + /// @dev Helper to clean storage and then initialize the system config with an arbitrary gas token address. + function cleanStorageAndInit(address _gasPayingToken) internal { + vm.store(address(systemConfig), bytes32(0), bytes32(0)); + vm.store(address(systemConfig), GasPayingToken.GAS_PAYING_TOKEN_SLOT, bytes32(0)); + vm.store(address(systemConfig), GasPayingToken.GAS_PAYING_TOKEN_NAME_SLOT, bytes32(0)); + vm.store(address(systemConfig), GasPayingToken.GAS_PAYING_TOKEN_SYMBOL_SLOT, bytes32(0)); + + systemConfig.initialize({ + _owner: alice, + _overhead: 2100, + _scalar: 1000000, + _batcherHash: bytes32(hex"abcd"), + _gasLimit: 30_000_000, + _unsafeBlockSigner: address(1), + _config: Constants.DEFAULT_RESOURCE_CONFIG(), + _batchInbox: address(0), + _addresses: SystemConfig.Addresses({ + l1CrossDomainMessenger: address(0), + l1ERC721Bridge: address(0), + disputeGameFactory: address(0), + l1StandardBridge: address(0), + optimismPortal: address(optimismPortal), + optimismMintableERC20Factory: address(0), + gasPayingToken: _gasPayingToken + }) + }); + } + + /// @dev Tests that initialization sets the correct values and getters work. + function test_initialize_customGasToken_succeeds() external { + (address addr, uint8 decimals) = systemConfig.gasPayingToken(); + assertEq(addr, address(token)); + assertEq(decimals, 18); + + assertEq(systemConfig.gasPayingTokenName(), token.name()); + assertEq(systemConfig.gasPayingTokenSymbol(), token.symbol()); + } + + /// @dev Tests that initialization sets the correct values and getters work. + function testFuzz_initialize_customGasToken_succeeds( + address _token, + string calldata _name, + string calldata _symbol + ) + external + { + vm.assume(bytes(_name).length <= 32); + vm.assume(bytes(_symbol).length <= 32); + + vm.mockCall(_token, abi.encodeWithSelector(token.decimals.selector), abi.encode(18)); + vm.mockCall(_token, abi.encodeWithSelector(token.name.selector), abi.encode(_name)); + vm.mockCall(_token, abi.encodeWithSelector(token.symbol.selector), abi.encode(_symbol)); + + cleanStorageAndInit(_token); + + (address addr, uint8 decimals) = systemConfig.gasPayingToken(); + assertEq(decimals, 18); + + if (_token == address(0) || _token == Constants.ETHER) { + assertEq(addr, Constants.ETHER); + assertEq(systemConfig.gasPayingTokenName(), "Ether"); + assertEq(systemConfig.gasPayingTokenSymbol(), "ETH"); + } else { + assertEq(addr, _token); + assertEq(systemConfig.gasPayingTokenName(), _name); + assertEq(systemConfig.gasPayingTokenSymbol(), _symbol); + } + } + + /// @dev Tests that initialization sets the correct values and getters work when token address passed is 0. + function test_initialize_customGasToken_zeroTokenAddress_succeeds() external { + cleanStorageAndInit(address(0)); + + (address addr, uint8 decimals) = systemConfig.gasPayingToken(); + assertEq(addr, address(Constants.ETHER)); + assertEq(decimals, 18); + + assertEq(systemConfig.gasPayingTokenName(), "Ether"); + assertEq(systemConfig.gasPayingTokenSymbol(), "ETH"); + } + + /// @dev Tests that initialization sets the correct values and getters work when token address is Constants.ETHER + function test_initialize_customGasToken_etherTokenAddress_succeeds() external { + cleanStorageAndInit(Constants.ETHER); + + (address addr, uint8 decimals) = systemConfig.gasPayingToken(); + assertEq(addr, address(Constants.ETHER)); + assertEq(decimals, 18); + + assertEq(systemConfig.gasPayingTokenName(), "Ether"); + assertEq(systemConfig.gasPayingTokenSymbol(), "ETH"); + } + + /// @dev Tests that initialization fails if decimals are not 18. + function test_initialize_customGasToken_wrongDecimals_fails() external { + vm.mockCall(address(token), abi.encodeWithSelector(token.decimals.selector), abi.encode(8)); + vm.expectRevert("SystemConfig: bad decimals of gas paying token"); + + cleanStorageAndInit(address(token)); + } + + /// @dev Tests that initialization fails if name is too long. + function test_initialize_customGasToken_nameTooLong_fails() external { + string memory name = new string(32); + name = string.concat(name, "a"); + + vm.mockCall(address(token), abi.encodeWithSelector(token.name.selector), abi.encode(name)); + vm.expectRevert("GasPayingToken: string cannot be greater than 32 bytes"); + + cleanStorageAndInit(address(token)); + } + + /// @dev Tests that initialization fails if symbol is too long. + function test_initialize_customGasToken_symbolTooLong_fails() external { + string memory symbol = new string(33); + symbol = string.concat(symbol, "a"); + + vm.mockCall(address(token), abi.encodeWithSelector(token.symbol.selector), abi.encode(symbol)); + vm.expectRevert("GasPayingToken: string cannot be greater than 32 bytes"); + + cleanStorageAndInit(address(token)); + } + + /// @dev Tests that initialization works with OptimismPortal. + function test_initialize_customGasTokenCall_succeeds() external { + vm.expectCall( + address(optimismPortal), + abi.encodeCall(optimismPortal.setGasPayingToken, (address(token), 18, bytes32("Silly"), bytes32("SIL"))) + ); + + vm.expectEmit(address(optimismPortal)); + emit TransactionDeposited( + 0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001, + Predeploys.L1_BLOCK_ATTRIBUTES, + 0, // deposit version + abi.encodePacked( + uint256(0), // mint + uint256(0), // value + uint64(80000), // gasLimit + false, // isCreation, + abi.encodeCall(L1Block.setGasPayingToken, (address(token), 18, bytes32("Silly"), bytes32("SIL"))) + ) + ); + + cleanStorageAndInit(address(token)); + } +} + contract SystemConfig_Setters_TestFail is SystemConfig_Init { /// @dev Tests that `setBatcherHash` reverts if the caller is not the owner. function test_setBatcherHash_notOwner_reverts() external { diff --git a/packages/contracts-bedrock/test/L2/L1Block.t.sol b/packages/contracts-bedrock/test/L2/L1Block.t.sol index e81b0f12be0..3ec6c334dae 100644 --- a/packages/contracts-bedrock/test/L2/L1Block.t.sol +++ b/packages/contracts-bedrock/test/L2/L1Block.t.sol @@ -6,6 +6,7 @@ import { CommonTest } from "test/setup/CommonTest.sol"; // Libraries import { Encoding } from "src/libraries/Encoding.sol"; +import { Constants } from "src/libraries/Constants.sol"; // Target contract import { L1Block } from "src/L2/L1Block.sol"; @@ -13,6 +14,8 @@ import { L1Block } from "src/L2/L1Block.sol"; contract L1BlockTest is CommonTest { address depositor; + event GasPayingTokenSet(address indexed token, uint8 indexed decimals, bytes32 name, bytes32 symbol); + /// @dev Sets up the test suite. function setUp() public virtual override { super.setUp(); @@ -163,3 +166,41 @@ contract L1BlockEcotone_Test is L1BlockTest { assertEq(data, expReturn); } } + +contract L1BlockCustomGasToken_Test is L1BlockTest { + function testFuzz_setGasPayingToken_succeeds( + address _token, + uint8 _decimals, + string memory _name, + string memory _symbol + ) + external + { + vm.assume(_token != address(0)); + vm.assume(_token != Constants.ETHER); + vm.assume(bytes(_name).length <= 32); + vm.assume(bytes(_symbol).length <= 32); + + bytes32 name = bytes32(abi.encodePacked(_name)); + bytes32 symbol = bytes32(abi.encodePacked(_symbol)); + + vm.expectEmit(address(l1Block)); + emit GasPayingTokenSet({ token: _token, decimals: _decimals, name: name, symbol: symbol }); + + vm.prank(depositor); + l1Block.setGasPayingToken({ _token: _token, _decimals: _decimals, _name: name, _symbol: symbol }); + + (address token, uint8 decimals) = l1Block.gasPayingToken(); + assertEq(token, _token); + assertEq(decimals, _decimals); + + assertEq(_name, l1Block.gasPayingTokenName()); + assertEq(_symbol, l1Block.gasPayingTokenSymbol()); + assertTrue(l1Block.isCustomGasToken()); + } + + function test_setGasPayingToken_isDepositor_reverts() external { + vm.expectRevert(L1Block.NotDepositor.selector); + l1Block.setGasPayingToken(address(this), 18, "Test", "TST"); + } +} diff --git a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol index 1394997926b..a57e3e0dce5 100644 --- a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol @@ -10,11 +10,13 @@ import { EIP1967Helper } from "test/mocks/EIP1967Helper.sol"; import { Hashing } from "src/libraries/Hashing.sol"; import { Encoding } from "src/libraries/Encoding.sol"; import { Types } from "src/libraries/Types.sol"; +import { Constants } from "src/libraries/Constants.sol"; // Target contract dependencies import { L2CrossDomainMessenger } from "src/L2/L2CrossDomainMessenger.sol"; import { L2ToL1MessagePasser } from "src/L2/L2ToL1MessagePasser.sol"; import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol"; +import { OptimismPortal } from "src/L1/OptimismPortal.sol"; contract L2CrossDomainMessenger_Test is Bridge_Initializer { /// @dev Receiver address for testing @@ -226,4 +228,136 @@ contract L2CrossDomainMessenger_Test is Bridge_Initializer { assertEq(l2CrossDomainMessenger.successfulMessages(hash), true); assertEq(l2CrossDomainMessenger.failedMessages(hash), true); } + + /// @dev Tests that gasPayingToken returns the correct values for ETH. + function test_gasPayingToken_ether_succeeds() external { + (address token, uint8 decimals) = l2CrossDomainMessenger.gasPayingToken(); + assertEq(token, address(Constants.ETHER)); + assertEq(decimals, 18); + } + + /// @dev Tests that gasPayingToken returns the correct values for non-ETH tokens. + function test_gasPayingToken_nonEther_succeeds() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + (address token, uint8 decimals) = l2CrossDomainMessenger.gasPayingToken(); + assertEq(token, address(1)); + assertEq(decimals, 2); + } + + /// @dev Tests that isCustomGasToken returns the correct value for ETH as the gas token. + function test_isCustomGasToken_ether_succeeds() external { + assertFalse(l2CrossDomainMessenger.isCustomGasToken()); + } + + /// @dev Tests that isCustomGasToken returns the correct value for non-ETH as the gas token. + function test_isCustomGasToken_nonEther_succeeds() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + assertTrue(l2CrossDomainMessenger.isCustomGasToken()); + } + + /// @dev Tests that sendMessage succeeds with a custom gas token when the call value is zero. + function test_sendMessage_customGasToken_noValue_succeeds() external { + // Mock the gasPayingToken function to return a custom gas token + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + assertTrue(l2CrossDomainMessenger.isCustomGasToken()); + + bytes memory xDomainCallData = + Encoding.encodeCrossDomainMessage(l2CrossDomainMessenger.messageNonce(), alice, recipient, 0, 100, hex"ff"); + vm.expectCall( + address(l2ToL1MessagePasser), + abi.encodeWithSelector( + L2ToL1MessagePasser.initiateWithdrawal.selector, + address(l1CrossDomainMessenger), + l2CrossDomainMessenger.baseGas(hex"ff", 100), + xDomainCallData + ) + ); + + // MessagePassed event + vm.expectEmit(true, true, true, true); + emit MessagePassed( + l2ToL1MessagePasser.messageNonce(), + address(l2CrossDomainMessenger), + address(l1CrossDomainMessenger), + 0, + l2CrossDomainMessenger.baseGas(hex"ff", 100), + xDomainCallData, + Hashing.hashWithdrawal( + Types.WithdrawalTransaction({ + nonce: l2ToL1MessagePasser.messageNonce(), + sender: address(l2CrossDomainMessenger), + target: address(l1CrossDomainMessenger), + value: 0, + gasLimit: l2CrossDomainMessenger.baseGas(hex"ff", 100), + data: xDomainCallData + }) + ) + ); + + vm.prank(alice); + l2CrossDomainMessenger.sendMessage(recipient, hex"ff", uint32(100)); + } + + /// @dev Tests that the sendMessage reverts when call value is non-zero with custom gas token. + function test_sendMessage_customGasToken_withValue_reverts() external { + // Mock the gasPayingToken function to return a custom gas token + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + assertTrue(l2CrossDomainMessenger.isCustomGasToken()); + + vm.expectRevert("CrossDomainMessenger: cannot send value with custom gas token"); + l2CrossDomainMessenger.sendMessage{ value: 1 }(recipient, hex"ff", uint32(100)); + } + + /// @dev Tests that the relayMessage succeeds with a custom gas token when the call value is zero. + function test_relayMessage_customGasToken_noValue_succeeds() external { + // Mock the gasPayingToken function to return a custom gas token + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + assertTrue(l2CrossDomainMessenger.isCustomGasToken()); + + address target = address(0xabcd); + address sender = address(l1CrossDomainMessenger); + address caller = AddressAliasHelper.applyL1ToL2Alias(address(l1CrossDomainMessenger)); + + vm.expectCall(target, hex"1111"); + + vm.prank(caller); + + vm.expectEmit(true, true, true, true); + + bytes32 hash = + Hashing.hashCrossDomainMessage(Encoding.encodeVersionedNonce(0, 1), sender, target, 0, 0, hex"1111"); + + emit RelayedMessage(hash); + + l2CrossDomainMessenger.relayMessage( + Encoding.encodeVersionedNonce(0, 1), // nonce + sender, + target, + 0, // value + 0, + hex"1111" + ); + + // the message hash is in the successfulMessages mapping + assert(l2CrossDomainMessenger.successfulMessages(hash)); + // it is not in the received messages mapping + assertEq(l2CrossDomainMessenger.failedMessages(hash), false); + } + + /// @dev Tests that the relayMessage reverts when call value is non-zero with custom gas token. + function test_relayMessage_customGasToken_withValue_reverts() external virtual { + // Mock the gasPayingToken function to return a custom gas token + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + assertTrue(l2CrossDomainMessenger.isCustomGasToken()); + vm.expectRevert("CrossDomainMessenger: cannot relay value with custom gas token"); + + l2CrossDomainMessenger.relayMessage{ value: 1 }( + Encoding.encodeVersionedNonce({ _nonce: 0, _version: 1 }), + address(0xabcd), + address(0xabcd), + 0, // value + 0, + hex"1111" + ); + } } diff --git a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol index 5e6a3cef142..20afd87f0ab 100644 --- a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol @@ -20,6 +20,8 @@ import { L2StandardBridge } from "src/L2/L2StandardBridge.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; import { StandardBridge } from "src/universal/StandardBridge.sol"; import { OptimismMintableERC20 } from "src/universal/OptimismMintableERC20.sol"; +import { Constants } from "src/libraries/Constants.sol"; +import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol"; contract L2StandardBridge_Test is Bridge_Initializer { using stdStorage for StdStorage; @@ -86,7 +88,7 @@ contract L2StandardBridge_Test is Bridge_Initializer { emit ETHBridgeInitiated(alice, alice, 100, hex""); // L2ToL1MessagePasser will emit a MessagePassed event - vm.expectEmit(true, true, true, true, address(l2ToL1MessagePasser)); + vm.expectEmit(address(l2ToL1MessagePasser)); emit MessagePassed( nonce, address(l2CrossDomainMessenger), @@ -98,11 +100,11 @@ contract L2StandardBridge_Test is Bridge_Initializer { ); // SentMessage event emitted by the CrossDomainMessenger - vm.expectEmit(true, true, true, true, address(l2CrossDomainMessenger)); + vm.expectEmit(address(l2CrossDomainMessenger)); emit SentMessage(address(l1StandardBridge), address(l2StandardBridge), message, nonce, 200_000); // SentMessageExtension1 event emitted by the CrossDomainMessenger - vm.expectEmit(true, true, true, true, address(l2CrossDomainMessenger)); + vm.expectEmit(address(l2CrossDomainMessenger)); emit SentMessageExtension1(address(l2StandardBridge), 100); vm.expectCall( @@ -131,13 +133,42 @@ contract L2StandardBridge_Test is Bridge_Initializer { assertEq(address(l2ToL1MessagePasser).balance, 100); } + /// @dev Tests that the receive function reverts with custom gas token. + function testFuzz_receive_customGasToken_reverts(uint256 _value) external { + vm.prank(alice, alice); + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + vm.deal(alice, _value); + (bool success, bytes memory data) = address(l2StandardBridge).call{ value: _value }(hex""); + assertFalse(success); + assembly { + data := add(data, 0x04) + } + assertEq(abi.decode(data, (string)), "StandardBridge: cannot bridge ETH with custom gas token"); + } + /// @dev Tests that `withdraw` reverts if the amount is not equal to the value sent. function test_withdraw_insufficientValue_reverts() external { assertEq(address(l2ToL1MessagePasser).balance, 0); vm.expectRevert("StandardBridge: bridging ETH must include sufficient ETH value"); vm.prank(alice, alice); - l2StandardBridge.withdraw(address(Predeploys.LEGACY_ERC20_ETH), 100, 1000, hex""); + l2StandardBridge.withdraw{ value: 1 }(address(Predeploys.LEGACY_ERC20_ETH), 100, 1, hex""); + } + + /// @dev Tests that `withdraw` reverts with custom gas token. + function test_withdraw_customGasToken_reverts() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + vm.prank(alice, alice); + l2StandardBridge.withdraw(address(Predeploys.LEGACY_ERC20_ETH), 1, 1, hex""); + } + + /// @dev Tests that `withdrawTo` reverts with custom gas token. + function test_withdrawTo_customGasToken_reverts() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + vm.prank(alice, alice); + l2StandardBridge.withdrawTo(address(Predeploys.LEGACY_ERC20_ETH), bob, 1, 1, hex""); } /// @dev Tests that the legacy `withdraw` interface on the L2StandardBridge @@ -146,7 +177,7 @@ contract L2StandardBridge_Test is Bridge_Initializer { assertTrue(alice.balance >= 100); assertEq(Predeploys.L2_TO_L1_MESSAGE_PASSER.balance, 0); - vm.expectEmit(true, true, true, true, address(l2StandardBridge)); + vm.expectEmit(address(l2StandardBridge)); emit WithdrawalInitiated({ l1Token: address(0), l2Token: Predeploys.LEGACY_ERC20_ETH, @@ -156,7 +187,7 @@ contract L2StandardBridge_Test is Bridge_Initializer { data: hex"" }); - vm.expectEmit(true, true, true, true, address(l2StandardBridge)); + vm.expectEmit(address(l2StandardBridge)); emit ETHBridgeInitiated({ from: alice, to: alice, amount: 100, data: hex"" }); vm.prank(alice, alice); @@ -169,6 +200,32 @@ contract L2StandardBridge_Test is Bridge_Initializer { assertEq(Predeploys.L2_TO_L1_MESSAGE_PASSER.balance, 100); } + + /// @dev Tests that the `isCustomGasToken` function returns the correct value when the gas token is ether. + function test_isCustomGasToken_ether_succeeds() external { + assertFalse(l2StandardBridge.isCustomGasToken()); + } + + /// @dev Tests that the `isCustomGasToken` function returns the correct value when the gas token is not ether. + function test_isCustomGasToken_nonEther_succeeds() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + assertTrue(l2StandardBridge.isCustomGasToken()); + } + + /// @dev Tests that gasPayingToken returns the correct values for ETH. + function test_gasPayingToken_ether_succeeds() external { + (address token, uint8 decimals) = l2StandardBridge.gasPayingToken(); + assertEq(token, Constants.ETHER); + assertEq(decimals, 18); + } + + /// @dev Tests that gasPayingToken returns the correct values for non-ETH tokens. + function test_gasPayingToken_nonEther_succeeds() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + (address token, uint8 decimals) = l2StandardBridge.gasPayingToken(); + assertEq(token, address(1)); + assertEq(decimals, 2); + } } contract PreBridgeERC20 is Bridge_Initializer { @@ -340,13 +397,13 @@ contract PreBridgeERC20To is Bridge_Initializer { }) ); - vm.expectEmit(true, true, true, true, address(l2StandardBridge)); + vm.expectEmit(address(l2StandardBridge)); emit WithdrawalInitiated(address(L1Token), _l2Token, alice, bob, 100, hex""); - vm.expectEmit(true, true, true, true, address(l2StandardBridge)); + vm.expectEmit(address(l2StandardBridge)); emit ERC20BridgeInitiated(_l2Token, address(L1Token), alice, bob, 100, hex""); - vm.expectEmit(true, true, true, true, address(l2ToL1MessagePasser)); + vm.expectEmit(address(l2ToL1MessagePasser)); emit MessagePassed( nonce, address(l2CrossDomainMessenger), @@ -358,11 +415,11 @@ contract PreBridgeERC20To is Bridge_Initializer { ); // SentMessage event emitted by the CrossDomainMessenger - vm.expectEmit(true, true, true, true, address(l2CrossDomainMessenger)); + vm.expectEmit(address(l2CrossDomainMessenger)); emit SentMessage(address(l1StandardBridge), address(l2StandardBridge), message, nonce, 1000); // SentMessageExtension1 event emitted by the CrossDomainMessenger - vm.expectEmit(true, true, true, true, address(l2CrossDomainMessenger)); + vm.expectEmit(address(l2CrossDomainMessenger)); emit SentMessageExtension1(address(l2StandardBridge), 0); if (_isLegacy) { @@ -435,10 +492,33 @@ contract L2StandardBridge_Bridge_Test is Bridge_Initializer { vm.expectCall(address(L2Token), abi.encodeWithSelector(OptimismMintableERC20.mint.selector, alice, 100)); // Should emit both the bedrock and legacy events - vm.expectEmit(true, true, true, true, address(l2StandardBridge)); + vm.expectEmit(address(l2StandardBridge)); + emit DepositFinalized(address(L1Token), address(L2Token), alice, alice, 100, hex""); + + vm.expectEmit(address(l2StandardBridge)); + emit ERC20BridgeFinalized(address(L2Token), address(L1Token), alice, alice, 100, hex""); + + vm.prank(address(l2CrossDomainMessenger)); + l2StandardBridge.finalizeDeposit(address(L1Token), address(L2Token), alice, alice, 100, hex""); + } + + /// @dev Tests that `finalizeDeposit` succeeds when depositing ERC20 with custom gas token. + function test_finalizeDeposit_depositingERC20_customGasToken_succeeds() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + + vm.mockCall( + address(l2StandardBridge.messenger()), + abi.encodeWithSelector(CrossDomainMessenger.xDomainMessageSender.selector), + abi.encode(address(l2StandardBridge.OTHER_BRIDGE())) + ); + + vm.expectCall(address(L2Token), abi.encodeWithSelector(OptimismMintableERC20.mint.selector, alice, 100)); + + // Should emit both the bedrock and legacy events + vm.expectEmit(address(l2StandardBridge)); emit DepositFinalized(address(L1Token), address(L2Token), alice, alice, 100, hex""); - vm.expectEmit(true, true, true, true, address(l2StandardBridge)); + vm.expectEmit(address(l2StandardBridge)); emit ERC20BridgeFinalized(address(L2Token), address(L1Token), alice, alice, 100, hex""); vm.prank(address(l2CrossDomainMessenger)); @@ -454,21 +534,30 @@ contract L2StandardBridge_Bridge_Test is Bridge_Initializer { ); // Should emit both the bedrock and legacy events - vm.expectEmit(true, true, true, true, address(l2StandardBridge)); - emit DepositFinalized(address(L1Token), address(L2Token), alice, alice, 100, hex""); + vm.expectEmit(address(l2StandardBridge)); + emit DepositFinalized(address(0), Predeploys.LEGACY_ERC20_ETH, alice, alice, 100, hex""); - vm.expectEmit(true, true, true, true, address(l2StandardBridge)); - emit ERC20BridgeFinalized( - address(L2Token), // localToken - address(L1Token), // remoteToken - alice, - alice, - 100, - hex"" + vm.expectEmit(address(l2StandardBridge)); + emit ETHBridgeFinalized(alice, alice, 100, hex""); + + vm.deal(address(l2CrossDomainMessenger), 100); + vm.prank(address(l2CrossDomainMessenger)); + l2StandardBridge.finalizeDeposit{ value: 100 }( + address(0), Predeploys.LEGACY_ERC20_ETH, alice, alice, 100, hex"" ); + } + /// @dev Tests that `finalizeDeposit` reverts when depositing ETH with custom gas token. + function test_finalizeDeposit_depositingETH_customGasToken_reverts() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + vm.mockCall( + address(l2StandardBridge.messenger()), + abi.encodeWithSelector(CrossDomainMessenger.xDomainMessageSender.selector), + abi.encode(address(l2StandardBridge.OTHER_BRIDGE())) + ); vm.prank(address(l2CrossDomainMessenger)); - l2StandardBridge.finalizeDeposit(address(L1Token), address(L2Token), alice, alice, 100, hex""); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + l2StandardBridge.finalizeDeposit(address(0), Predeploys.LEGACY_ERC20_ETH, alice, alice, 100, hex""); } /// @dev Tests that `finalizeDeposit` reverts if the amounts do not match. @@ -509,6 +598,107 @@ contract L2StandardBridge_Bridge_Test is Bridge_Initializer { vm.expectRevert("StandardBridge: cannot send to messenger"); l2StandardBridge.finalizeBridgeETH{ value: 100 }(alice, address(l2CrossDomainMessenger), 100, hex""); } + + /// @dev Tests that bridging ETH succeeds. + function testFuzz_bridgeETH_succeeds(uint256 _value, uint32 _minGasLimit, bytes calldata _extraData) external { + uint256 nonce = l2CrossDomainMessenger.messageNonce(); + + bytes memory message = + abi.encodeWithSelector(StandardBridge.finalizeBridgeETH.selector, alice, alice, _value, _extraData); + + vm.expectCall( + address(l2StandardBridge), + _value, + abi.encodeWithSelector(l2StandardBridge.bridgeETH.selector, _minGasLimit, _extraData) + ); + + vm.expectCall( + address(l2CrossDomainMessenger), + _value, + abi.encodeWithSelector( + CrossDomainMessenger.sendMessage.selector, address(l1StandardBridge), message, _minGasLimit + ) + ); + + vm.expectEmit(address(l2StandardBridge)); + emit ETHBridgeInitiated(alice, alice, _value, _extraData); + + // SentMessage event emitted by the CrossDomainMessenger + vm.expectEmit(address(l2CrossDomainMessenger)); + emit SentMessage(address(l1StandardBridge), address(l2StandardBridge), message, nonce, _minGasLimit); + + // SentMessageExtension1 event emitted by the CrossDomainMessenger + vm.expectEmit(address(l2CrossDomainMessenger)); + emit SentMessageExtension1(address(l2StandardBridge), _value); + + vm.deal(alice, _value); + vm.prank(alice, alice); + + l2StandardBridge.bridgeETH{ value: _value }(_minGasLimit, _extraData); + } + + /// @dev Tests that bridging reverts with custom gas token. + function test_bridgeETH_customGasToken_reverts() external { + vm.prank(alice, alice); + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + + l2StandardBridge.bridgeETH(50000, hex"dead"); + } + + /// @dev Tests that bridging ETH to a different address succeeds. + function testFuzz_bridgeETHTo_succeeds(uint256 _value, uint32 _minGasLimit, bytes calldata _extraData) external { + uint256 nonce = l2CrossDomainMessenger.messageNonce(); + + vm.expectCall( + address(l2StandardBridge), + _value, + abi.encodeWithSelector(l1StandardBridge.bridgeETHTo.selector, bob, _minGasLimit, _extraData) + ); + + bytes memory message = + abi.encodeWithSelector(StandardBridge.finalizeBridgeETH.selector, alice, bob, _value, _extraData); + + // the L2 bridge should call + // L2CrossDomainMessenger.sendMessage + vm.expectCall( + address(l2CrossDomainMessenger), + abi.encodeWithSelector( + CrossDomainMessenger.sendMessage.selector, address(l1StandardBridge), message, _minGasLimit + ) + ); + + vm.expectEmit(address(l2StandardBridge)); + emit ETHBridgeInitiated(alice, bob, _value, _extraData); + + // SentMessage event emitted by the CrossDomainMessenger + vm.expectEmit(address(l2CrossDomainMessenger)); + emit SentMessage(address(l1StandardBridge), address(l2StandardBridge), message, nonce, _minGasLimit); + + // SentMessageExtension1 event emitted by the CrossDomainMessenger + vm.expectEmit(address(l2CrossDomainMessenger)); + emit SentMessageExtension1(address(l2StandardBridge), _value); + + // deposit eth to bob + vm.deal(alice, _value); + vm.prank(alice, alice); + + l2StandardBridge.bridgeETHTo{ value: _value }(bob, _minGasLimit, _extraData); + } + + /// @dev Tests that bridging reverts with custom gas token. + function testFuzz_bridgeETHTo_customGasToken_reverts( + uint256 _value, + uint32 _minGasLimit, + bytes calldata _extraData + ) + external + { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + vm.deal(address(this), _value); + l2StandardBridge.bridgeETHTo{ value: _value }(bob, _minGasLimit, _extraData); + } } contract L2StandardBridge_FinalizeBridgeETH_Test is Bridge_Initializer { @@ -531,4 +721,20 @@ contract L2StandardBridge_FinalizeBridgeETH_Test is Bridge_Initializer { l2StandardBridge.finalizeBridgeETH{ value: 100 }(alice, alice, 100, hex""); } + + /// @dev Tests that finalizing bridged reverts with custom gas token. + function test_finalizeBridgeETH_customGasToken_reverts() external { + address messenger = address(l2StandardBridge.messenger()); + vm.mockCall( + messenger, + abi.encodeWithSelector(CrossDomainMessenger.xDomainMessageSender.selector), + abi.encode(address(l2StandardBridge.OTHER_BRIDGE())) + ); + vm.deal(address(l2CrossDomainMessenger), 1); + vm.prank(address(l2CrossDomainMessenger)); + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + + l2StandardBridge.finalizeBridgeETH(alice, alice, 1, hex""); + } } diff --git a/packages/contracts-bedrock/test/L2/WETH.t.sol b/packages/contracts-bedrock/test/L2/WETH.t.sol new file mode 100644 index 00000000000..79979b66c3e --- /dev/null +++ b/packages/contracts-bedrock/test/L2/WETH.t.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +// Testing utilities +import { CommonTest } from "test/setup/CommonTest.sol"; + +// Target contract +import { WETH } from "src/L2/WETH.sol"; + +contract WETH_Test is CommonTest { + /// @dev Tests that the name function returns the correct value. + function testFuzz_name_succeeds(string memory _gasPayingTokenName) external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingTokenName()"), abi.encode(_gasPayingTokenName)); + + assertEq(string.concat("Wrapped ", _gasPayingTokenName), weth.name()); + } + + /// @dev Tests that the symbol function returns the correct value. + function testFuzz_symbol_succeeds(string memory _gasPayingTokenSymbol) external { + vm.mockCall( + address(l1Block), abi.encodeWithSignature("gasPayingTokenSymbol()"), abi.encode(_gasPayingTokenSymbol) + ); + + assertEq(string.concat("W", _gasPayingTokenSymbol), weth.symbol()); + } + + /// @dev Tests that the name function returns the correct value. + function test_name_ether_succeeds() external { + assertFalse(l1Block.isCustomGasToken()); + assertEq("Wrapped Ether", weth.name()); + } + + /// @dev Tests that the symbol function returns the correct value. + function test_symbol_ether_succeeds() external { + assertFalse(l1Block.isCustomGasToken()); + assertEq("WETH", weth.symbol()); + } +} diff --git a/packages/contracts-bedrock/test/Predeploys.t.sol b/packages/contracts-bedrock/test/Predeploys.t.sol index 90baa81415a..df7c2e3229e 100644 --- a/packages/contracts-bedrock/test/Predeploys.t.sol +++ b/packages/contracts-bedrock/test/Predeploys.t.sol @@ -18,7 +18,7 @@ contract PredeploysTest is CommonTest { || _addr == Predeploys.L2_STANDARD_BRIDGE || _addr == Predeploys.L2_ERC721_BRIDGE || _addr == Predeploys.SEQUENCER_FEE_WALLET || _addr == Predeploys.OPTIMISM_MINTABLE_ERC20_FACTORY || _addr == Predeploys.OPTIMISM_MINTABLE_ERC721_FACTORY || _addr == Predeploys.L1_BLOCK_ATTRIBUTES - || _addr == Predeploys.GAS_PRICE_ORACLE || _addr == Predeploys.DEPLOYER_WHITELIST || _addr == Predeploys.WETH9 + || _addr == Predeploys.GAS_PRICE_ORACLE || _addr == Predeploys.DEPLOYER_WHITELIST || _addr == Predeploys.WETH || _addr == Predeploys.L1_BLOCK_NUMBER || _addr == Predeploys.LEGACY_MESSAGE_PASSER || _addr == Predeploys.PROXY_ADMIN || _addr == Predeploys.BASE_FEE_VAULT || _addr == Predeploys.L1_FEE_VAULT || _addr == Predeploys.GOVERNANCE_TOKEN || _addr == Predeploys.SCHEMA_REGISTRY || _addr == Predeploys.EAS; @@ -26,7 +26,7 @@ contract PredeploysTest is CommonTest { /// @dev Returns true if the address is not proxied. function _notProxied(address _addr) internal pure returns (bool) { - return _addr == Predeploys.GOVERNANCE_TOKEN || _addr == Predeploys.WETH9; + return _addr == Predeploys.GOVERNANCE_TOKEN || _addr == Predeploys.WETH; } /// @dev Returns true if the account is not meant to be in the L2 genesis anymore. diff --git a/packages/contracts-bedrock/test/Specs.t.sol b/packages/contracts-bedrock/test/Specs.t.sol index 733a9680752..a2c55893289 100644 --- a/packages/contracts-bedrock/test/Specs.t.sol +++ b/packages/contracts-bedrock/test/Specs.t.sol @@ -113,11 +113,14 @@ contract Specification_Test is CommonTest { _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("RELAY_RESERVED_GAS()") }); _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("baseGas(bytes,uint32)") }); _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("failedMessages(bytes32)") }); - _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("initialize(address,address)") }); + _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("initialize(address,address,address)") }); _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("messageNonce()") }); _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("paused()") }); _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("otherMessenger()") }); _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("portal()") }); + _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("systemConfig()") }); + _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("isCustomGasToken()") }); + _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("gasPayingToken()") }); _addSpec({ _name: "L1CrossDomainMessenger", _sel: _getSel("relayMessage(uint256,address,address,uint256,uint256,bytes)"), @@ -192,13 +195,16 @@ contract Specification_Test is CommonTest { _auth: Role.MESSENGER, _pausable: true }); - _addSpec({ _name: "L1StandardBridge", _sel: _getSel("initialize(address,address)") }); + _addSpec({ _name: "L1StandardBridge", _sel: _getSel("initialize(address,address,address)") }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("l2TokenBridge()") }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("messenger()") }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("otherBridge()") }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("paused()") }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("superchainConfig()") }); _addSpec({ _name: "L1StandardBridge", _sel: _getSel("version()") }); + _addSpec({ _name: "L1StandardBridge", _sel: _getSel("gasPayingToken()") }); + _addSpec({ _name: "L1StandardBridge", _sel: _getSel("isCustomGasToken()") }); + _addSpec({ _name: "L1StandardBridge", _sel: _getSel("systemConfig()") }); // L2OutputOracle _addSpec({ _name: "L2OutputOracle", _sel: _getSel("CHALLENGER()") }); @@ -255,6 +261,13 @@ contract Specification_Test is CommonTest { _addSpec({ _name: "OptimismPortal", _sel: _getSel("superchainConfig()") }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("systemConfig()") }); _addSpec({ _name: "OptimismPortal", _sel: _getSel("version()") }); + _addSpec({ _name: "OptimismPortal", _sel: _getSel("balance()") }); + _addSpec({ _name: "OptimismPortal", _sel: _getSel("gasPayingToken()") }); + _addSpec({ + _name: "OptimismPortal", + _sel: _getSel("depositERC20Transaction(address,uint256,uint256,uint64,bool,bytes)") + }); + _addSpec({ _name: "OptimismPortal", _sel: _getSel("setGasPayingToken(address,uint8,bytes32,bytes32)") }); // OptimismPortal2 _addSpec({ _name: "OptimismPortal2", _sel: _getSel("depositTransaction(address,uint256,uint64,bool,bytes)") }); @@ -368,6 +381,9 @@ contract Specification_Test is CommonTest { _addSpec({ _name: "SystemConfig", _sel: _getSel("OPTIMISM_PORTAL_SLOT()") }); _addSpec({ _name: "SystemConfig", _sel: _getSel("OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT()") }); _addSpec({ _name: "SystemConfig", _sel: _getSel("BATCH_INBOX_SLOT()") }); + _addSpec({ _name: "SystemConfig", _sel: _getSel("gasPayingToken()") }); + _addSpec({ _name: "SystemConfig", _sel: _getSel("gasPayingTokenName()") }); + _addSpec({ _name: "SystemConfig", _sel: _getSel("gasPayingTokenSymbol()") }); // ProxyAdmin _addSpec({ _name: "ProxyAdmin", _sel: _getSel("addressManager()") }); diff --git a/packages/contracts-bedrock/test/invariants/CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/invariants/CrossDomainMessenger.t.sol index b0b64253493..a83d71b2214 100644 --- a/packages/contracts-bedrock/test/invariants/CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/invariants/CrossDomainMessenger.t.sol @@ -95,6 +95,8 @@ contract XDM_MinGasLimits is Bridge_Initializer { // Set up the `L1CrossDomainMessenger` and `OptimismPortal` contracts. super.setUp(); + assertFalse(l1CrossDomainMessenger.isCustomGasToken()); + // Deploy a relay actor actor = new RelayActor(optimismPortal, l1CrossDomainMessenger, vm, doFail); diff --git a/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol b/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol index 0d0bdcc3e31..a0c06129e75 100644 --- a/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol @@ -33,7 +33,8 @@ contract SystemConfig_GasLimitLowerBound_Invariant is Test { l1StandardBridge: address(0), disputeGameFactory: address(0), optimismPortal: address(0), - optimismMintableERC20Factory: address(0) + optimismMintableERC20Factory: address(0), + gasPayingToken: Constants.ETHER }) ) ) diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index 9c3079446f3..7b732d013a3 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -13,15 +13,15 @@ contract DeploymentSummary is DeploymentSummaryCode { Vm private constant vm = Vm(VM_ADDRESS); address internal constant addressManagerAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; - address internal constant l1CrossDomainMessengerAddress = 0x71fA82Ea96672797954C28032b337aA40AAFC99f; + address internal constant l1CrossDomainMessengerAddress = 0xFA89fcE7597a7254c0ea0857bAe8638D806Af703; address internal constant l1CrossDomainMessengerProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; address internal constant l1ERC721BridgeAddress = 0x44637A4292E0CD2B17A55d5F6B2F05AFcAcD0586; address internal constant l1ERC721BridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant l1StandardBridgeAddress = 0x0Da314776B267D898dEE57F6Ede357ae28b3b83c; + address internal constant l1StandardBridgeAddress = 0xc7DEEE506487d083a370F8937583d779E75cc151; address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; - address internal constant optimismPortalAddress = 0xCEa36be2e9724d88cB107C552c602a8025DB88bA; + address internal constant optimismPortalAddress = 0x2541C7F364B08aEb5362f263A2f8aF479aC716B8; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; @@ -30,7 +30,7 @@ contract DeploymentSummary is DeploymentSummaryCode { address internal constant safeSingletonAddress = 0x90193C961A926261B756D1E5bb255e67ff9498A1; address internal constant superchainConfigAddress = 0x068E44eB31e111028c41598E4535be7468674D0A; address internal constant superchainConfigProxyAddress = 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809; - address internal constant systemConfigAddress = 0xB20f22D5eA3D6568d2e2AED04487b4DC15141C00; + address internal constant systemConfigAddress = 0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2; address internal constant systemConfigProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; address internal constant systemOwnerSafeAddress = 0x2601573C28B77dea6C8B73385c25024A28a00C3F; @@ -281,7 +281,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000003"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000b20f22d5ea3d6568d2e2aed04487b4dc15141c00"; + value = hex"0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -344,7 +344,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000005"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"0000000000000000000000000da314776b267d898dee57f6ede357ae28b3b83c"; + value = hex"000000000000000000000000c7deee506487d083a370f8937583d779e75cc151"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -355,6 +355,9 @@ contract DeploymentSummary is DeploymentSummaryCode { slot = hex"0000000000000000000000000000000000000000000000000000000000000032"; value = hex"000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809"; vm.store(l1StandardBridgeProxyAddress, slot, value); + slot = hex"0000000000000000000000000000000000000000000000000000000000000033"; + value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; + vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000003"; value = hex"00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d"; vm.store(l1StandardBridgeProxyAddress, slot, value); @@ -404,7 +407,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000009"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e"; - value = hex"00000000000000000000000071fa82ea96672797954c28032b337aa40aafc99f"; + value = hex"000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703"; vm.store(addressManagerAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000010000000000000000000000000000000000000000"; @@ -418,6 +421,9 @@ contract DeploymentSummary is DeploymentSummaryCode { slot = hex"00000000000000000000000000000000000000000000000000000000000000fc"; value = hex"000000000000000000000000978e3286eb805934215a88694d80b09aded68d90"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); + slot = hex"00000000000000000000000000000000000000000000000000000000000000fd"; + value = hex"0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4"; + vm.store(l1CrossDomainMessengerProxyAddress, slot, value); slot = hex"00000000000000000000000000000000000000000000000000000000000000cc"; value = hex"000000000000000000000000000000000000000000000000000000000000dead"; vm.store(l1CrossDomainMessengerProxyAddress, slot, value); @@ -431,7 +437,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"000000000000000000000000000000000000000000000000000000000000000a"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000cea36be2e9724d88cb107c552c602a8025db88ba"; + value = hex"0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index 04ee44add0f..cd5b65fd5a0 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -35,15 +35,15 @@ contract DeploymentSummaryCode { bytes internal constant l1ERC721BridgeProxyCode = hex"60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a"; bytes internal constant optimismPortalCode = - hex"6080604052600436106101125760003560e01c80638c3152e9116100a5578063a35d99df11610074578063cff0ab9611610059578063cff0ab961461039a578063e965084c1461043b578063e9e05c42146104c757600080fd5b8063a35d99df14610341578063c0c53b8b1461037a57600080fd5b80638c3152e9146102975780639b5f694a146102b75780639bf62d82146102e4578063a14238e71461031157600080fd5b806354fd4d50116100e157806354fd4d50146101fc5780635c975abb146102525780636dbffb78146102775780638b4c40b01461013757600080fd5b806333d7e2bd1461013e57806335e80ab314610195578063452a9320146101c75780634870496f146101dc57600080fd5b36610139576101373334620186a06000604051806020016040528060008152506104d5565b005b600080fd5b34801561014a57600080fd5b5060375461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a157600080fd5b5060355461016b90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156101d357600080fd5b5061016b610692565b3480156101e857600080fd5b506101376101f7366004614709565b61072a565b34801561020857600080fd5b506102456040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161018c919061485b565b34801561025e57600080fd5b50610267610d2d565b604051901515815260200161018c565b34801561028357600080fd5b5061026761029236600461486e565b610dc0565b3480156102a357600080fd5b506101376102b2366004614887565b610e7d565b3480156102c357600080fd5b5060365461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f057600080fd5b5060325461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031d57600080fd5b5061026761032c36600461486e565b60336020526000908152604090205460ff1681565b34801561034d57600080fd5b5061036161035c3660046148e1565b6116b8565b60405167ffffffffffffffff909116815260200161018c565b34801561038657600080fd5b506101376103953660046148fc565b6116d1565b3480156103a657600080fd5b50600154610402906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161018c565b34801561044757600080fd5b5061049961045636600461486e565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff928316602085015291169082015260600161018c565b6101376104d5366004614955565b8260005a90508380156104fd575073ffffffffffffffffffffffffffffffffffffffff871615155b15610534576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61053e83516116b8565b67ffffffffffffffff168567ffffffffffffffff16101561058b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156105c9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146105ea575033731111000000000000000000000000000000001111015b600034888888886040516020016106059594939291906149d2565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610675919061485b565b60405180910390a45050610689828261193b565b50505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614a37565b905090565b610732610d2d565b15610769576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff160361082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190614a74565b5190506108db6108d636869003860186614ad9565b611c12565b8114610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610824565b600061097487611c6e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610a8a5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a869190614a74565b5114155b610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610824565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610bdf9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610bd5888a614b3f565b8a60400135611c9e565b610c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610824565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614bc3565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610e759173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a9190614a74565b602001516fffffffffffffffffffffffffffffffff16611cc2565b92915050565b565b610e85610d2d565b15610ebc576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610824565b6000610f7082611c6e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610824565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec9190614be0565b81602001516fffffffffffffffffffffffffffffffff1610156111b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610824565b6111d681602001516fffffffffffffffffffffffffffffffff16611cc2565b611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610824565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190614a74565b82518151919250146113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610824565b61140c81602001516fffffffffffffffffffffffffffffffff16611cc2565b6114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610824565b60008381526033602052604090205460ff161561155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610824565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516115ff93929190611d68565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061166490841515815260200190565b60405180910390a28015801561167a5750326001145b156116b1576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60006116c5826010614c28565b610e7590615208614c58565b600054610100900460ff16158080156116f15750600054600160ff909116105b8061170b5750303b15801561170b575060005460ff166001145b611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610824565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156117f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010085841602179055603254166118ae57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6118b6611dc6565b801561191957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611971907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614c84565b9050600061197d611ed9565b90506000816020015160ff16826000015163ffffffff1661199e9190614cca565b90508215611ad5576001546000906119d5908390700100000000000000000000000000000000900467ffffffffffffffff16614d32565b90506000836040015160ff16836119ec9190614da6565b600154611a0c9084906fffffffffffffffffffffffffffffffff16614da6565b611a169190614cca565b600154909150600090611a6790611a409084906fffffffffffffffffffffffffffffffff16614e62565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16611f9a565b90506001861115611a9657611a93611a4082876040015160ff1660018a611a8e9190614c84565b611fb9565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611b08908490700100000000000000000000000000000000900467ffffffffffffffff16614c58565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611b95576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090611bc1906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614ed6565b90506000611bd348633b9aca0061200e565b611bdd9083614f13565b905060005a611bec9088614c84565b905080821115611c0857611c08611c038284614c84565b612025565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611c51949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611c51979096959101614f27565b600080611caa86612053565b9050611cb881868686612085565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190614be0565b611d609083614f7e565b421192915050565b6000806000611d788660006120b5565b905080611dae576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff16611e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610824565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003610e7b5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015611f76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614fbb565b6000611faf611fa985856120d3565b836120e3565b90505b9392505050565b6000670de0b6b3a7640000611ffa611fd18583614cca565b611fe390670de0b6b3a7640000614d32565b611ff585670de0b6b3a7640000614da6565b6120f2565b6120049086614da6565b611faf9190614cca565b60008183101561201e5781611fb2565b5090919050565b6000805a90505b825a6120389083614c84565b101561204e576120478261505a565b915061202c565b505050565b6060818051906020012060405160200161206f91815260200190565b6040516020818303038152906040529050919050565b60006120ac84612096878686612123565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561201e5781611fb2565b600081831261201e5781611fb2565b6000611fb2670de0b6b3a76400008361210a86612ba1565b6121149190614da6565b61211e9190614cca565b612de5565b60606000845111612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610824565b600061219b84613024565b905060006121a886613110565b90506000846040516020016121bf91815260200190565b60405160208183030381529060405290506000805b8451811015612b185760008582815181106121f1576121f1615092565b60200260200101519050845183111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610824565b8260000361234557805180516020918201206040516122da926122b492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610824565b61249c565b8051516020116123fb578051805160209182012060405161236f926122b492910190815260200190565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610824565b80518451602080870191909120825191909201201461249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610824565b6124a860106001614f7e565b81602001515103612684578451830361261c576124e281602001516010815181106124d5576124d5615092565b6020026020010151613173565b96506000875111612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610824565b600186516125839190614c84565b8214612611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610824565b505050505050611fb2565b600085848151811061263057612630615092565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061265b5761265b615092565b6020026020010151905061266e816132d3565b955061267b600186614f7e565b94505050612b05565b600281602001515103612a7d57600061269c826132f8565b90506000816000815181106126b3576126b3615092565b016020015160f81c905060006126ca6002836150c1565b6126d59060026150e3565b905060006126e6848360ff1661331c565b905060006126f48a8961331c565b905060006127028383613352565b905080835114612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610824565b60ff8516600214806127a9575060ff85166003145b15612998578082511461283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610824565b61285887602001516001815181106124d5576124d5615092565b9c5060008d51116128eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610824565b60018c516128f99190614c84565b8814612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610824565b505050505050505050505050611fb2565b60ff851615806129ab575060ff85166001145b156129ea576129d787602001516001815181106129ca576129ca615092565b60200260200101516132d3565b99506129e3818a614f7e565b9850612a72565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610824565b505050505050612b05565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610824565b5080612b108161505a565b9150506121d4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610824565b6000808213612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b60006060612c1984613406565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213612e1657506000919050565b680755bf798b4a1bf1e58212612e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610824565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561304257613042614529565b60405190808252806020026020018201604052801561308757816020015b60408051808201909152606080825260208201528152602001906001900390816130605790505b50915060005b818110156131095760405180604001604052808583815181106130b2576130b2615092565b602002602001015181526020016130e18684815181106130d4576130d4615092565b60200260200101516134dc565b8152508382815181106130f6576130f6615092565b602090810291909101015260010161308d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613168578060011b82018184015160001a8060041c8253600f81166001830153505060010161313a565b509295945050505050565b60606000806000613183856134ef565b91945092509050600081600181111561319e5761319e615106565b1461322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610824565b6132358284614f7e565b8551146132c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610824565b6120ac85602001518484613f5c565b606060208260000151106132ef576132ea82613173565b610e75565b610e7582613ff0565b6060610e7561331783602001516000815181106124d5576124d5615092565b613110565b60608251821061333b5750604080516020810190915260008152610e75565b611fb2838384865161334d9190614c84565b614006565b6000808251845110613365578251613368565b83515b90505b80821080156133ef575082828151811061338757613387615092565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106133c6576133c6615092565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156133ff5781600101915061336b565b5092915050565b6000808211613471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610e756134ea836141de565b6142c7565b6000806000808460000151116135ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b6020840151805160001a607f81116135d2576000600160009450945094505050613f55565b60b781116137e05760006135e7608083614c84565b9050808760000151116136a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610824565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061371b57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6137cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610824565b5060019550935060009250613f55915050565b60bf8111613b2e5760006137f560b783614c84565b9050808760000151116138b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610824565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361398e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610824565b613a5c8184614f7e565b895111613b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610824565b613b1c836001614f7e565b9750955060009450613f559350505050565b60f78111613c0f576000613b4360c083614c84565b905080876000015111613bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b600195509350849250613f55915050565b6000613c1c60f783614c84565b905080876000015111613cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610824565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610824565b613e838184614f7e565b895111613f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b613f43836001614f7e565b9750955060019450613f559350505050565b9193909250565b60608167ffffffffffffffff811115613f7757613f77614529565b6040519080825280601f01601f191660200182016040528015613fa1576020820181803683370190505b5090508115611fb2576000613fb68486614f7e565b90506020820160005b84811015613fd7578281015182820152602001613fbf565b84811115613fe6576000858301525b5050509392505050565b6060610e75826020015160008460000151613f5c565b60608182601f011015614075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8282840110156140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8183018451101561414e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610824565b60608215801561416d57604051915060008252602082016040526141d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141a657805183526020928301920161418e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116142a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b50604080518082019091528151815260209182019181019190915290565b606060008060006142d7856134ef565b9194509250905060018160018111156142f2576142f2615106565b1461437f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610824565b845161438b8385614f7e565b14614418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610824565b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161442f5790505093506000835b865181101561451d576000806144a26040518060400160405280858c600001516144869190614c84565b8152602001858c6020015161449b9190614f7e565b90526134ef565b5091509150604051806040016040528083836144be9190614f7e565b8152602001848b602001516144d39190614f7e565b8152508885815181106144e8576144e8615092565b60209081029190910101526144fe600185614f7e565b935061450a8183614f7e565b6145149084614f7e565b9250505061445c565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561459f5761459f614529565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146145c957600080fd5b50565b600082601f8301126145dd57600080fd5b813567ffffffffffffffff8111156145f7576145f7614529565b61462860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614558565b81815284602083860101111561463d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561466c57600080fd5b60405160c0810167ffffffffffffffff828210818311171561469057614690614529565b8160405282935084358352602085013591506146ab826145a7565b816020840152604085013591506146c1826145a7565b816040840152606085013560608401526080850135608084015260a08501359150808211156146ef57600080fd5b506146fc858286016145cc565b60a0830152505092915050565b600080600080600085870360e081121561472257600080fd5b863567ffffffffffffffff8082111561473a57600080fd5b6147468a838b0161465a565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561477f57600080fd5b60408901955060c089013592508083111561479957600080fd5b828901925089601f8401126147ad57600080fd5b82359150808211156147be57600080fd5b508860208260051b84010111156147d457600080fd5b959894975092955050506020019190565b60005b838110156148005781810151838201526020016147e8565b838111156119195750506000910152565b600081518084526148298160208601602086016147e5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fb26020830184614811565b60006020828403121561488057600080fd5b5035919050565b60006020828403121561489957600080fd5b813567ffffffffffffffff8111156148b057600080fd5b6148bc8482850161465a565b949350505050565b803567ffffffffffffffff811681146148dc57600080fd5b919050565b6000602082840312156148f357600080fd5b611fb2826148c4565b60008060006060848603121561491157600080fd5b833561491c816145a7565b9250602084013561492c816145a7565b9150604084013561493c816145a7565b809150509250925092565b80151581146145c957600080fd5b600080600080600060a0868803121561496d57600080fd5b8535614978816145a7565b94506020860135935061498d604087016148c4565b9250606086013561499d81614947565b9150608086013567ffffffffffffffff8111156149b957600080fd5b6149c5888289016145cc565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614a268160498501602087016147e5565b919091016049019695505050505050565b600060208284031215614a4957600080fd5b8151611fb2816145a7565b80516fffffffffffffffffffffffffffffffff811681146148dc57600080fd5b600060608284031215614a8657600080fd5b6040516060810181811067ffffffffffffffff82111715614aa957614aa9614529565b60405282518152614abc60208401614a54565b6020820152614acd60408401614a54565b60408201529392505050565b600060808284031215614aeb57600080fd5b6040516080810181811067ffffffffffffffff82111715614b0e57614b0e614529565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b5a57614b5a614529565b8360051b6020614b6b818301614558565b868152918501918181019036841115614b8357600080fd5b865b84811015614bb757803586811115614b9d5760008081fd5b614ba936828b016145cc565b845250918301918301614b85565b50979650505050505050565b600060208284031215614bd557600080fd5b8151611fb281614947565b600060208284031215614bf257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614c4f57614c4f614bf9565b02949350505050565b600067ffffffffffffffff808316818516808303821115614c7b57614c7b614bf9565b01949350505050565b600082821015614c9657614c96614bf9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614cd957614cd9614c9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614d2d57614d2d614bf9565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614d6c57614d6c614bf9565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614da057614da0614bf9565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614de757614de7614bf9565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614e2257614e22614bf9565b60008712925087820587128484161615614e3e57614e3e614bf9565b87850587128184161615614e5457614e54614bf9565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614e9c57614e9c614bf9565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614ed057614ed0614bf9565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f0e57614f0e614bf9565b500290565b600082614f2257614f22614c9b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f7260c0830184614811565b98975050505050505050565b60008219821115614f9157614f91614bf9565b500190565b805163ffffffff811681146148dc57600080fd5b805160ff811681146148dc57600080fd5b600060c08284031215614fcd57600080fd5b60405160c0810181811067ffffffffffffffff82111715614ff057614ff0614529565b604052614ffc83614f96565b815261500a60208401614faa565b602082015261501b60408401614faa565b604082015261502c60608401614f96565b606082015261503d60808401614f96565b608082015261504e60a08401614a54565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508b5761508b614bf9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806150d4576150d4614c9b565b8060ff84160691505092915050565b600060ff821660ff8416808210156150fd576150fd614bf9565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; + hex"60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615431565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b6366004615565565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156b7565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156ca565b611089565b34801561036257600080fd5b506101936103713660046156f2565b611144565b34801561038257600080fd5b50610193610391366004615738565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156ca565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b366004615775565b611dd6565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611def565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615790565b611e49565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156ca565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157db565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120b3565b50610673828261225f565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615858565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c61252c565b6107bd89826158a0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615858565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a0565b909155506108a890508a8a8a8a8a8a6120b3565b50506108b4828261225f565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158b8565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158f2565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a919061592f565b519050610ba4610b9f36869003860186615994565b612608565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d87612664565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061592f565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a6159fa565b8a60400135612694565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a7e565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061592f565b602001516fffffffffffffffffffffffffffffffff166126b8565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a16201388061275e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156b7565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f982612664565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615858565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126b8565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061592f565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126b8565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127ba565b9150611d1f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cf6576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd89190615858565b9050866060015160386000828254611bf09190615b00565b909155505060408701516060880151611c209173ffffffffffffffffffffffffffffffffffffffff851691612818565b6060870151611c2f9082615b00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190615858565b14611cf4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d1a57611acd8660400151876080015160008960a001516127ba565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8190851515815260200190565b60405180910390a281158015611d975750326001145b15611dce576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611de3826010615b17565b61113e90615208615b47565b600080611dfa6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e41574791505090565b505060385490565b600054610100900460ff1615808015611e695750600054600160ff909116105b80611e835750303b158015611e83575060005460ff166001145b611f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61202e612873565b801561209157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120d5575073ffffffffffffffffffffffffffffffffffffffff861615155b1561210c576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121168151611dd6565b67ffffffffffffffff168367ffffffffffffffff161015612163576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a1576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121c2575033731111000000000000000000000000000000001111015b600086868686866040516020016121dd959493929190615a9b565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161224d91906156b7565b60405180910390a45050505050505050565b600154600090612295907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b00565b905060006122a1612986565b90506000816020015160ff16826000015163ffffffff166122c29190615ba2565b905082156123f9576001546000906122f9908390700100000000000000000000000000000000900467ffffffffffffffff16615c0a565b90506000836040015160ff16836123109190615c7e565b6001546123309084906fffffffffffffffffffffffffffffffff16615c7e565b61233a9190615ba2565b60015490915060009061238b906123649084906fffffffffffffffffffffffffffffffff16615d3a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a47565b905060018611156123ba576123b761236482876040015160ff1660018a6123b29190615b00565b612a66565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061242c908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124b9576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124e5906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615dae565b905060006124f748633b9aca00612abb565b6125019083615deb565b905060005a6125109088615b00565b9050808211156108b4576108b46125278284615b00565b612ad2565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120919085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612afb565b60008160000151826020015183604001518460600151604051602001612647949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612647979096959101615dff565b6000806126a086612c07565b90506126ae81868686612c39565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190615858565b61275690836158a0565b421192915050565b60018054829190601090612791908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127ca866000612c69565b905080612800576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261286e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612586565b505050565b600054610100900460ff1661290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e6a565b6000612a5c612a568585612c87565b83612c97565b90505b9392505050565b6000670de0b6b3a7640000612aa7612a7e8583615ba2565b612a9090670de0b6b3a7640000615c0a565b612aa285670de0b6b3a7640000615c7e565b612ca6565b612ab19086615c7e565b612a5c9190615ba2565b600081831015612acb5781612a5f565b5090919050565b6000805a90505b825a612ae59083615b00565b101561286e57612af482615f0d565b9150612ad9565b6000612b5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cd79092919063ffffffff16565b80519091501561286e5780806020019051810190612b7b9190615a7e565b61286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2391815260200190565b6040516020818303038152906040529050919050565b6000612c6084612c4a878686612ce6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612acb5781612a5f565b6000818312612acb5781612a5f565b6000612a5f670de0b6b3a764000083612cbe86613764565b612cc89190615c7e565b612cd29190615ba2565b6139a8565b6060612a5c8484600085613be7565b60606000845111612d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d5e84613d7d565b90506000612d6b86613e69565b9050600084604051602001612d8291815260200190565b60405160208183030381529060405290506000805b84518110156136db576000858281518110612db457612db4615f45565b602002602001015190508451831115612e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f085780518051602091820120604051612e9d92612e7792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b61305f565b805151602011612fbe5780518051602091820120604051612f3292612e7792910190815260200190565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b80518451602080870191909120825191909201201461305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b61306b601060016158a0565b8160200151510361324757845183036131df576130a5816020015160108151811061309857613098615f45565b6020026020010151613ecc565b96506000875111613138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b600186516131469190615b00565b82146131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a5f565b60008584815181106131f3576131f3615f45565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061321e5761321e615f45565b602002602001015190506132318161402c565b955061323e6001866158a0565b945050506136c8565b60028160200151510361364057600061325f82614051565b905060008160008151811061327657613276615f45565b016020015160f81c9050600061328d600283615f74565b613298906002615f96565b905060006132a9848360ff16614075565b905060006132b78a89614075565b905060006132c583836140ab565b905080835114613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff85166002148061336c575060ff85166003145b1561355b5780825114613401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61341b876020015160018151811061309857613098615f45565b9c5060008d51116134ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134bc9190615b00565b881461354a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a5f565b60ff8516158061356e575060ff85166001145b156135ad5761359a876020015160018151811061358d5761358d615f45565b602002602001015161402c565b99506135a6818a6158a0565b9850613635565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136c8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136d381615f0d565b915050612d97565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137dc8461415f565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139d957506000919050565b680755bf798b4a1bf1e58212613a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d209190615fb9565b60006040518083038185875af1925050503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b5091509150613d72828286614235565b979650505050505050565b80516060908067ffffffffffffffff811115613d9b57613d9b615325565b604051908082528060200260200182016040528015613de057816020015b6040805180820190915260608082526020820152815260200190600190039081613db95790505b50915060005b81811015613e62576040518060400160405280858381518110613e0b57613e0b615f45565b60200260200101518152602001613e3a868481518110613e2d57613e2d615f45565b6020026020010151614288565b815250838281518110613e4f57613e4f615f45565b6020908102919091010152600101613de6565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec1578060011b82018184015160001a8060041c8253600f811660018301535050600101613e93565b509295945050505050565b60606000806000613edc8561429b565b919450925090506000816001811115613ef757613ef7615fd5565b14613f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f8e82846158a0565b85511461401d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6085602001518484614d08565b606060208260000151106140485761404382613ecc565b61113e565b61113e82614d9c565b606061113e614070836020015160008151811061309857613098615f45565b613e69565b606082518210614094575060408051602081019091526000815261113e565b612a5f83838486516140a69190615b00565b614db2565b60008082518451106140be5782516140c1565b83515b90505b808210801561414857508282815181106140e0576140e0615f45565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411f5761411f615f45565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614158578160010191506140c4565b5092915050565b60008082116141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614244575081612a5f565b8251156142545782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156b7565b606061113e61429683614f8a565b615073565b600080600080846000015111614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f811161437e576000600160009450945094505050614d01565b60b7811161458c576000614393608083615b00565b90508087600001511161444e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144c757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d01915050565b60bf81116148da5760006145a160b783615b00565b90508087600001511161465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361473a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c603781116147fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61480881846158a0565b8951116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148c88360016158a0565b9750955060009450614d019350505050565b60f781116149bb5760006148ef60c083615b00565b9050808760000151116149aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d01915050565b60006149c860f783615b00565b905080876000015111614a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c2f81846158a0565b895111614ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cef8360016158a0565b9750955060019450614d019350505050565b9193909250565b60608167ffffffffffffffff811115614d2357614d23615325565b6040519080825280601f01601f191660200182016040528015614d4d576020820181803683370190505b5090508115612a5f576000614d6284866158a0565b90506020820160005b84811015614d83578281015182820152602001614d6b565b84811115614d92576000858301525b5050509392505050565b606061113e826020015160008460000151614d08565b60608182601f011015614e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f195760405191506000825260208201604052614f81565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f52578051835260209283019201614f3a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111615055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b606060008060006150838561429b565b91945092509050600181600181111561509e5761509e615fd5565b1461512b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513783856158a0565b146151c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151db5790505093506000835b86518110156152c95760008061524e6040518060400160405280858c600001516152329190615b00565b8152602001858c6020015161524791906158a0565b905261429b565b50915091506040518060400160405280838361526a91906158a0565b8152602001848b6020015161527f91906158a0565b81525088858151811061529457615294615f45565b60209081029190910101526152aa6001856158a0565b93506152b681836158a0565b6152c090846158a0565b92505050615208565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152f757600080fd5b50565b803567ffffffffffffffff8116811461531257600080fd5b919050565b80151581146152f757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561539b5761539b615325565b604052919050565b600082601f8301126153b457600080fd5b813567ffffffffffffffff8111156153ce576153ce615325565b6153ff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615354565b81815284602083860101111561541457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561544a57600080fd5b8635615455816152d5565b95506020870135945060408701359350615471606088016152fa565b9250608087013561548181615317565b915060a087013567ffffffffffffffff81111561549d57600080fd5b6154a989828a016153a3565b9150509295509295509295565b600060c082840312156154c857600080fd5b60405160c0810167ffffffffffffffff82821081831117156154ec576154ec615325565b816040528293508435835260208501359150615507826152d5565b8160208401526040850135915061551d826152d5565b816040840152606085013560608401526080850135608084015260a085013591508082111561554b57600080fd5b50615558858286016153a3565b60a0830152505092915050565b600080600080600085870360e081121561557e57600080fd5b863567ffffffffffffffff8082111561559657600080fd5b6155a28a838b016154b6565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155db57600080fd5b60408901955060c08901359250808311156155f557600080fd5b828901925089601f84011261560957600080fd5b823591508082111561561a57600080fd5b508860208260051b840101111561563057600080fd5b959894975092955050506020019190565b60005b8381101561565c578181015183820152602001615644565b838111156120915750506000910152565b60008151808452615685816020860160208601615641565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a5f602083018461566d565b6000602082840312156156dc57600080fd5b5035919050565b60ff811681146152f757600080fd5b6000806000806080858703121561570857600080fd5b8435615713816152d5565b93506020850135615723816156e3565b93969395505050506040820135916060013590565b60006020828403121561574a57600080fd5b813567ffffffffffffffff81111561576157600080fd5b61576d848285016154b6565b949350505050565b60006020828403121561578757600080fd5b612a5f826152fa565b6000806000606084860312156157a557600080fd5b83356157b0816152d5565b925060208401356157c0816152d5565b915060408401356157d0816152d5565b809150509250925092565b600080600080600060a086880312156157f357600080fd5b85356157fe816152d5565b945060208601359350615813604087016152fa565b9250606086013561582381615317565b9150608086013567ffffffffffffffff81111561583f57600080fd5b61584b888289016153a3565b9150509295509295909350565b60006020828403121561586a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158b3576158b3615871565b500190565b600080604083850312156158cb57600080fd5b82516158d6816152d5565b60208401519092506158e7816156e3565b809150509250929050565b60006020828403121561590457600080fd5b8151612a5f816152d5565b80516fffffffffffffffffffffffffffffffff8116811461531257600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964615325565b604052825181526159776020840161590f565b60208201526159886040840161590f565b60408201529392505050565b6000608082840312156159a657600080fd5b6040516080810181811067ffffffffffffffff821117156159c9576159c9615325565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1557615a15615325565b8360051b6020615a26818301615354565b868152918501918181019036841115615a3e57600080fd5b865b84811015615a7257803586811115615a585760008081fd5b615a6436828b016153a3565b845250918301918301615a40565b50979650505050505050565b600060208284031215615a9057600080fd5b8151612a5f81615317565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615aef816049850160208701615641565b919091016049019695505050505050565b600082821015615b1257615b12615871565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b3e57615b3e615871565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b6a57615b6a615871565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb157615bb1615b73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0557615c05615871565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4457615c44615871565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c7857615c78615871565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615871565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615871565b60008712925087820587128484161615615d1657615d16615871565b87850587128184161615615d2c57615d2c615871565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7457615d74615871565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615da857615da8615871565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615de657615de6615871565b500290565b600082615dfa57615dfa615b73565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e4a60c083018461566d565b98975050505050505050565b805163ffffffff8116811461531257600080fd5b600060c08284031215615e7c57600080fd5b60405160c0810181811067ffffffffffffffff82111715615e9f57615e9f615325565b604052615eab83615e56565b81526020830151615ebb816156e3565b60208201526040830151615ece816156e3565b6040820152615edf60608401615e56565b6060820152615ef060808401615e56565b6080820152615f0160a0840161590f565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f3e57615f3e615871565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8757615f87615b73565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb057615fb0615871565b90039392505050565b60008251615fcb818460208701615641565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; bytes internal constant l1CrossDomainMessengerCode = - hex"6080604052600436106101805760003560e01c80635c975abb116100d6578063a4e7f8bd1161007f578063d764ad0b11610059578063d764ad0b14610463578063db505d8014610476578063ecc70428146104a357600080fd5b8063a4e7f8bd146103e3578063b1b1b20914610413578063b28ade251461044357600080fd5b806383a74074116100b057806383a74074146103a15780638cbeeef2146102b85780639fce812c146103b857600080fd5b80635c975abb1461033a5780636425666b1461035f5780636e296e451461038c57600080fd5b80633dbb202b116101385780634c1d6a69116101125780634c1d6a69146102b857806354fd4d50146102ce5780635644cfdf1461032457600080fd5b80633dbb202b1461025b5780633f827a5a14610270578063485cc9551461029857600080fd5b80630ff754ea116101695780630ff754ea146101cd5780632828d7e81461021957806335e80ab31461022e57600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561022557600080fd5b5061019a604081565b34801561023a57600080fd5b5060fb546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b61026e610269366004611a22565b610508565b005b34801561027c57600080fd5b50610285600181565b60405161ffff90911681526020016101af565b3480156102a457600080fd5b5061026e6102b3366004611a89565b610765565b3480156102c457600080fd5b5061019a619c4081565b3480156102da57600080fd5b506103176040518060400160405280600581526020017f322e332e3000000000000000000000000000000000000000000000000000000081525081565b6040516101af9190611b2d565b34801561033057600080fd5b5061019a61138881565b34801561034657600080fd5b5061034f6109d3565b60405190151581526020016101af565b34801561036b57600080fd5b5060fc546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039857600080fd5b506101f4610a6c565b3480156103ad57600080fd5b5061019a62030d4081565b3480156103c457600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101f4565b3480156103ef57600080fd5b5061034f6103fe366004611b47565b60ce6020526000908152604090205460ff1681565b34801561041f57600080fd5b5061034f61042e366004611b47565b60cb6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061019a61045e366004611b60565b610b53565b61026e610471366004611bb4565b610bc1565b34801561048257600080fd5b5060cf546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104af57600080fd5b506104fa60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b60cf5461063a9073ffffffffffffffffffffffffffffffffffffffff16610530858585610b53565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061059c60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016105b89796959493929190611c83565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114f2565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856106bf60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516106d1959493929190611ce2565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b6000547501000000000000000000000000000000000000000000900460ff16158080156107b0575060005460017401000000000000000000000000000000000000000090910460ff16105b806107e25750303b1580156107e2575060005474010000000000000000000000000000000000000000900460ff166001145b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156108f957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc80549285169290911691909117905561096b73420000000000000000000000000000000000000761158b565b80156109ce57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190611d30565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f74207365740000000000000000000000606482015260840161086a565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b6f604063ffffffff8816611d81565b610b799190611db1565b610b84601088611d81565b610b919062030d40611dff565b610b9b9190611dff565b610ba59190611dff565b610baf9190611dff565b610bb99190611dff565b949350505050565b610bc96109d3565b15610c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a2070617573656400000000604482015260640161086a565b60f087901c60028110610ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161086a565b8061ffff16600003610de0576000610d3c878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610dde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161086a565b505b6000610e26898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e30611709565b15610e6857853414610e4457610e44611e2b565b600081815260ce602052604090205460ff1615610e6357610e63611e2b565b610fba565b3415610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161086a565b600081815260ce602052604090205460ff16610fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161086a565b610fc3876117e5565b15611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161086a565b600081815260cb602052604090205460ff1615611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161086a565b61113685611127611388619c40611dff565b67ffffffffffffffff1661182b565b158061115c575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561127557600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b50506114cd565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061130688619c405a6112c99190611e5a565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113bc57600082815260cb602052604090205460ff161561135957611359611e2b565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114c9565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611553908890839089906000908990600401611e71565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161086a565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611863565b805190602001209050949350505050565b60006116f68787878787876118fc565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a67575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190611ec9565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611825575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60608484848460405160240161187c9493929190611ee6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161191996959493929190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119bd57600080fd5b50565b60008083601f8401126119d257600080fd5b50813567ffffffffffffffff8111156119ea57600080fd5b602083019150836020828501011115611a0257600080fd5b9250929050565b803563ffffffff81168114611a1d57600080fd5b919050565b60008060008060608587031215611a3857600080fd5b8435611a438161199b565b9350602085013567ffffffffffffffff811115611a5f57600080fd5b611a6b878288016119c0565b9094509250611a7e905060408601611a09565b905092959194509250565b60008060408385031215611a9c57600080fd5b8235611aa78161199b565b91506020830135611ab78161199b565b809150509250929050565b6000815180845260005b81811015611ae857602081850181015186830182015201611acc565b81811115611afa576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b406020830184611ac2565b9392505050565b600060208284031215611b5957600080fd5b5035919050565b600080600060408486031215611b7557600080fd5b833567ffffffffffffffff811115611b8c57600080fd5b611b98868287016119c0565b9094509250611bab905060208501611a09565b90509250925092565b600080600080600080600060c0888a031215611bcf57600080fd5b873596506020880135611be18161199b565b95506040880135611bf18161199b565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611c1b57600080fd5b611c278a828b016119c0565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611cd560c083018486611c3a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611d12608083018688611c3a565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611d4257600080fd5b81518015158114611b4057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611da857611da8611d52565b02949350505050565b600067ffffffffffffffff80841680611df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611e2257611e22611d52565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611e6c57611e6c611d52565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611ebe60a0830184611ac2565b979650505050505050565b600060208284031215611edb57600080fd5b8151611b408161199b565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611f1f6080830185611ac2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611f7b60c0830184611ac2565b9897505050505050505056fea164736f6c634300080f000a"; + hex"6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant l2OutputOracleCode = hex"60806040526004361061018a5760003560e01c806389c44cbb116100d6578063ce5db8d61161007f578063dcec334811610059578063dcec33481461049b578063e1a41bcf146104b0578063f4daa291146104c657600080fd5b8063ce5db8d614610445578063cf8e5cf01461045b578063d1de856c1461047b57600080fd5b8063a25ae557116100b0578063a25ae55714610391578063a8e4fb90146103ed578063bffa7f0f1461041a57600080fd5b806389c44cbb1461034857806393991af3146103685780639aaab6481461037e57600080fd5b806369f16eec1161013857806370872aa51161011257806370872aa5146102fc5780637f00642014610312578063887862721461033257600080fd5b806369f16eec146102a75780636abcf563146102bc5780636b4d98dd146102d157600080fd5b8063529933df11610169578063529933df146101ea578063534db0e2146101ff57806354fd4d501461025157600080fd5b80622134cc1461018f5780631c89c97d146101b35780634599c788146101d5575b600080fd5b34801561019b57600080fd5b506005545b6040519081526020015b60405180910390f35b3480156101bf57600080fd5b506101d36101ce3660046113a2565b6104db565b005b3480156101e157600080fd5b506101a06108b6565b3480156101f657600080fd5b506004546101a0565b34801561020b57600080fd5b5060065461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101aa565b34801561025d57600080fd5b5061029a6040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516101aa9190611405565b3480156102b357600080fd5b506101a0610929565b3480156102c857600080fd5b506003546101a0565b3480156102dd57600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561030857600080fd5b506101a060015481565b34801561031e57600080fd5b506101a061032d366004611478565b61093b565b34801561033e57600080fd5b506101a060025481565b34801561035457600080fd5b506101d3610363366004611478565b610b4f565b34801561037457600080fd5b506101a060055481565b6101d361038c366004611491565b610de9565b34801561039d57600080fd5b506103b16103ac366004611478565b61124a565b60408051825181526020808401516fffffffffffffffffffffffffffffffff9081169183019190915292820151909216908201526060016101aa565b3480156103f957600080fd5b5060075461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561042657600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561045157600080fd5b506101a060085481565b34801561046757600080fd5b506103b1610476366004611478565b6112de565b34801561048757600080fd5b506101a0610496366004611478565b611316565b3480156104a757600080fd5b506101a0611346565b3480156104bc57600080fd5b506101a060045481565b3480156104d257600080fd5b506008546101a0565b600054610100900460ff16158080156104fb5750600054600160ff909116105b806105155750303b158015610515575060005460ff166001145b6105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561060457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60008811610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e2030000000000000606482015260840161059d565b60008711610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e2030000000000000000000000000606482015260840161059d565b428511156107db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60048890556005879055600186905560028590556007805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556006805492861692909116919091179055600882905580156108ac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6003546000901561092057600380546108d1906001906114f2565b815481106108e1576108e1611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b600354600090610924906001906114f2565b60006109456108b6565b8211156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a40161059d565b600354610aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161059d565b6003546000905b80821015610b485760006002610acc8385611538565b610ad69190611550565b90508460038281548110610aec57610aec611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610b3e57610b37816001611538565b9250610b42565b8091505b50610ab6565b5092915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610bf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161059d565b6003548110610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60085460038281548110610cc357610cc3611509565b6000918252602090912060016002909202010154610cf3906fffffffffffffffffffffffffffffffff16426114f2565b10610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161059d565b6000610db160035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b610ebe611346565b8314610f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161059d565b42610f7c84611316565b10611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161059d565b83611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161059d565b81156111525781814014611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161059d565b8261115c60035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e24260405161118e91815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b60408051606081018252600080825260208201819052918101919091526003828154811061127a5761127a611509565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b604080516060810182526000808252602082018190529181019190915260036113068361093b565b8154811061127a5761127a611509565b60006005546001548361132991906114f2565b611333919061158b565b6002546113409190611538565b92915050565b60006004546113536108b6565b6109249190611538565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b803573ffffffffffffffffffffffffffffffffffffffff8116811461139d57600080fd5b919050565b600080600080600080600060e0888a0312156113bd57600080fd5b873596506020880135955060408801359450606088013593506113e260808901611379565b92506113f060a08901611379565b915060c0880135905092959891949750929550565b600060208083528351808285015260005b8181101561143257858101830151858201604001528201611416565b81811115611444576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561148a57600080fd5b5035919050565b600080600080608085870312156114a757600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611504576115046114c3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561154b5761154b6114c3565b500190565b600082611586577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156115c3576115c36114c3565b50029056fea164736f6c634300080f000a"; bytes internal constant systemConfigCode = - hex"608060405234801561001057600080fd5b50600436106102415760003560e01c8063a711986911610145578063e2a3285c116100bd578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610597578063fd32aa0f1461059f578063ffa1ad74146105a757600080fd5b8063f45e65d81461057a578063f68016b71461058357600080fd5b8063e2a3285c1461054e578063e81b2c6d14610556578063f2b4e6171461055f578063f2fde38b1461056757600080fd5b8063c71973f611610114578063cc731b02116100f9578063cc731b021461040a578063dac6e63a1461053e578063e0e2016d1461054657600080fd5b8063c71973f6146103e4578063c9b26f61146103f757600080fd5b8063a7119869146103b9578063b40a817c146103c1578063bc49ce5f146103d4578063c4e8ddfa146103dc57600080fd5b806348cd4cb1116101d85780635d73369c116101a75780638da5cb5b1161018c5780638da5cb5b14610380578063935f029e1461039e5780639b7d7f0a146103b157600080fd5b80635d73369c14610370578063715018a61461037857600080fd5b806348cd4cb1146102d75780634add321d146102df5780634f16540b1461030057806354fd4d501461032757600080fd5b80630c18c162116102145780630c18c162146102ab57806318d13918146102b457806319f5cea8146102c75780631fd19ee1146102cf57600080fd5b806306c9265714610246578063078f29cf146102615780630a49cb031461028e5780630bbb796814610296575b600080fd5b61024e6105af565b6040519081526020015b60405180910390f35b6102696105dd565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610258565b610269610616565b6102a96102a4366004611928565b610646565b005b61024e60655481565b6102a96102c2366004611a55565b610a44565b61024e610a58565b610269610a83565b61024e610aad565b6102e7610add565b60405167ffffffffffffffff9091168152602001610258565b61024e7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103636040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102589190611ae2565b61024e610b03565b6102a9610b2e565b60335473ffffffffffffffffffffffffffffffffffffffff16610269565b6102a96103ac366004611af5565b610b42565b610269610b58565b610269610b88565b6102a96103cf366004611b17565b610bb8565b61024e610bc9565b610269610bf4565b6102a96103f2366004611b32565b610c24565b6102a9610405366004611b4e565b610c35565b6104ce6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102589190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b610269610c46565b61024e610c76565b61024e610ca1565b61024e60675481565b610269610ccc565b6102a9610575366004611a55565b610cfc565b61024e60665481565b6068546102e79067ffffffffffffffff1681565b61024e610db0565b61024e610ddb565b61024e600081565b6105da60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b81565b600061061161060d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b5490565b905090565b600061061161060d60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b600054610100900460ff16158080156106665750600054600160ff909116105b806106805750303b158015610680575060005460ff166001145b610711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561076f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610777610e2a565b6107808a610cfc565b61078987610ec9565b6107938989610f2a565b61079c86610fbb565b6107c57f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6107f86107f360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b849055565b61082c61082660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b83519055565b61086361085a60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b60208401519055565b61089a61089160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b60408401519055565b6108d16108c860017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b60608401519055565b6109086108ff60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b60808401519055565b61093f61093660017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b60a08401519055565b610947611099565b61095084611101565b610958610add565b67ffffffffffffffff168667ffffffffffffffff1610156109d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b8015610a3857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b610a4c611575565b610a55816115f6565b50565b6105da60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b60006106117f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b600061061161060d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b6069546000906106119063ffffffff6a0100000000000000000000820481169116611bad565b6105da60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b610b36611575565b610b40600061167a565b565b610b4a611575565b610b548282610f2a565b5050565b600061061161060d60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b600061061161060d60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b610bc0611575565b610a5581610fbb565b6105da60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b600061061161060d60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b610c2c611575565b610a5581611101565b610c3d611575565b610a5581610ec9565b600061061161060d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b6105da60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b6105da60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b600061061161060d60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907611b96565b610d04611575565b73ffffffffffffffffffffffffffffffffffffffff8116610da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610708565b610a558161167a565b6105da60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b6105da60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b5490565b600054610100900460ff16610ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610708565b610b406116f1565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610f1e9190611ae2565b60405180910390a35050565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610fae9190611ae2565b60405180910390a3505050565b610fc3610add565b67ffffffffffffffff168167ffffffffffffffff161015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002610eed565b6110c761060d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b600003610b4057610b406110fc60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff1611156111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610708565b6001816040015160ff1611611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610708565b6068546080820151825167ffffffffffffffff909216916112699190611bd9565b63ffffffff1611156112d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b6000816020015160ff161161136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610708565b8051602082015163ffffffff82169160ff9091169061138e908290611bf8565b6113989190611c42565b63ffffffff161461142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610708565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610b40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610708565b61161f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506003610eed565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610708565b610b403361167a565b803573ffffffffffffffffffffffffffffffffffffffff811681146117b557600080fd5b919050565b803567ffffffffffffffff811681146117b557600080fd5b60405160c0810167ffffffffffffffff8111828210171561181c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803563ffffffff811681146117b557600080fd5b803560ff811681146117b557600080fd5b600060c0828403121561185957600080fd5b60405160c0810181811067ffffffffffffffff821117156118a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806118b283611822565b81526118c060208401611836565b60208201526118d160408401611836565b60408201526118e260608401611822565b60608201526118f360808401611822565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461191b57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361026081121561194857600080fd5b6119518b611791565b995060208b0135985060408b0135975060608b0135965061197460808c016117ba565b955061198260a08c01611791565b94506119918c60c08d01611847565b93506119a06101808c01611791565b925060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156119d257600080fd5b506119db6117d2565b6119e86101a08c01611791565b81526119f76101c08c01611791565b6020820152611a096101e08c01611791565b6040820152611a1b6102008c01611791565b6060820152611a2d6102208c01611791565b6080820152611a3f6102408c01611791565b60a0820152809150509295985092959850929598565b600060208284031215611a6757600080fd5b611a7082611791565b9392505050565b6000815180845260005b81811015611a9d57602081850181015186830182015201611a81565b81811115611aaf576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a706020830184611a77565b60008060408385031215611b0857600080fd5b50508035926020909101359150565b600060208284031215611b2957600080fd5b611a70826117ba565b600060c08284031215611b4457600080fd5b611a708383611847565b600060208284031215611b6057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611ba857611ba8611b67565b500390565b600067ffffffffffffffff808316818516808303821115611bd057611bd0611b67565b01949350505050565b600063ffffffff808316818516808303821115611bd057611bd0611b67565b600063ffffffff80841680611c36577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615611c6557611c65611b67565b0294935050505056fea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b50600436106102925760003560e01c8063a711986911610160578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461062e578063fd32aa0f14610636578063ffa1ad741461063e57600080fd5b8063f45e65d814610611578063f68016b71461061a57600080fd5b8063e81b2c6d116100bd578063e81b2c6d146105ed578063f2b4e617146105f6578063f2fde38b146105fe57600080fd5b8063e0e2016d146105dd578063e2a3285c146105e557600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b0214610499578063d8444715146105cd578063dac6e63a146105d557600080fd5b8063c71973f614610473578063c9b26f611461048657600080fd5b8063a711986914610448578063b40a817c14610450578063bc49ce5f14610463578063c4e8ddfa1461046b57600080fd5b80634add321d1161020e5780635d73369c116101c25780638da5cb5b116101a75780638da5cb5b1461040f578063935f029e1461042d5780639b7d7f0a1461044057600080fd5b80635d73369c146103ff578063715018a61461040757600080fd5b80634f16540b116101f35780634f16540b1461038757806354fd4d50146103ae578063550fcdc9146103f757600080fd5b80634add321d146103535780634c1e843d1461037457600080fd5b806318d13918116102655780631fd19ee11161024a5780631fd19ee11461030d5780634397dfef1461031557806348cd4cb11461034b57600080fd5b806318d13918146102f057806319f5cea81461030557600080fd5b806306c9265714610297578063078f29cf146102b25780630a49cb03146102df5780630c18c162146102e7575b600080fd5b61029f610646565b6040519081526020015b60405180910390f35b6102ba610674565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a9565b6102ba6106ad565b61029f60655481565b6103036102fe366004611f41565b6106dd565b005b61029f6106f1565b6102ba61071c565b61031d610746565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102a9565b61029f61075a565b61035b61078a565b60405167ffffffffffffffff90911681526020016102a9565b6103036103823660046120b4565b6107b0565b61029f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103ea6040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a99190612269565b6103ea610bbb565b61029f610bc5565b610303610bf0565b60335473ffffffffffffffffffffffffffffffffffffffff166102ba565b61030361043b36600461227c565b610c04565b6102ba610c1a565b6102ba610c4a565b61030361045e36600461229e565b610c7a565b61029f610c8b565b6102ba610cb6565b6103036104813660046122b9565b610ce6565b6103036104943660046122d5565b610cf7565b61055d6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102a99190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6103ea610d08565b6102ba610d12565b61029f610d42565b61029f610d6d565b61029f60675481565b6102ba610d98565b61030361060c366004611f41565b610dc8565b61029f60665481565b60685461035b9067ffffffffffffffff1681565b61029f610e7c565b61029f610ea7565b61029f600081565b61067160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b81565b60006106a86106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b5490565b905090565b60006106a86106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b6106e5611090565b6106ee81611111565b50565b61067160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60006106a87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107516111ce565b90939092509050565b60006106a86106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b6069546000906106a89063ffffffff6a0100000000000000000000820481169116612334565b600054610100900460ff16158080156107d05750600054600160ff909116105b806107ea5750303b1580156107ea575060005460ff166001145b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108e161124b565b6108ea8a610dc8565b6108f3876112ea565b6108fd8989611312565b610906866113a3565b61092f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b61096261095d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b849055565b61099661099060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b83519055565b6109cd6109c460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60208401519055565b610a046109fb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b60408401519055565b610a3b610a3260017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60608401519055565b610a72610a6960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b60808401519055565b610aa9610aa060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60a08401519055565b610ab1611481565b610abe8260c001516114e9565b610ac7846117e2565b610acf61078a565b67ffffffffffffffff168667ffffffffffffffff161015610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b8015610baf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106a8611c56565b61067160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610bf8611090565b610c026000611d17565b565b610c0c611090565b610c168282611312565b5050565b60006106a86106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60006106a86106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610c82611090565b6106ee816113a3565b61067160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b60006106a86106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b610cee611090565b6106ee816117e2565b610cff611090565b6106ee816112ea565b60606106a8611d8e565b60006106a86106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b61067160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b61067160017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60006106a86106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b610dd0611090565b73ffffffffffffffffffffffffffffffffffffffff8116610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610872565b6106ee81611d17565b61067160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b61067160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e203332206279746573000000000000000000006064820152608401610872565b610f8f82611067565b92915050565b610ffb610fc360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61102e61102960017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b839055565b61106161105c60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b829055565b50505050565b80516021811061107f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610872565b61113a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516111c29190612269565b60405180910390a35050565b600080806112006106a460017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261123f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b600054610100900460ff166112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c02611e44565b6067819055604080516020808201849052825180830390910181529082019091526000611191565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113969190612269565b60405180910390a3505050565b6113ab61078a565b67ffffffffffffffff168167ffffffffffffffff161015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611191565b6114af6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b600003610c0257610c026114e460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611538575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b156106ee57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190612360565b60ff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e0000000000000000000000000000000000006064820152608401610872565b60006116dc8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116d7919081019061237d565b610ef2565b9050600061172e8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b905061173d8360128484610f95565b6117456106ad565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610872565b6001816040015160ff1611611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610872565b6068546080820151825167ffffffffffffffff9092169161194a9190612448565b63ffffffff1611156119b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b6000816020015160ff1611611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610872565b8051602082015163ffffffff82169160ff90911690611a6f908290612467565b611a7991906124b1565b63ffffffff1614611b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610872565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611c626111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cdb57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b611ee4565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611d9a6111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e1357505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b600054610100900460ff16611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c0233611d17565b60405160005b82811a15611efa57600101611eea565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f3c57600080fd5b919050565b600060208284031215611f5357600080fd5b611f5c82611f18565b9392505050565b803567ffffffffffffffff81168114611f3c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611fcd57611fcd611f7b565b60405290565b803563ffffffff81168114611f3c57600080fd5b60ff811681146106ee57600080fd5b600060c0828403121561200857600080fd5b60405160c0810181811067ffffffffffffffff8211171561202b5761202b611f7b565b60405290508061203a83611fd3565b8152602083013561204a81611fe7565b6020820152604083013561205d81611fe7565b604082015261206e60608401611fd3565b606082015261207f60808401611fd3565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146120a757600080fd5b60a0919091015292915050565b6000806000806000806000806000898b036102808112156120d457600080fd5b6120dd8b611f18565b995060208b0135985060408b0135975060608b0135965061210060808c01611f63565b955061210e60a08c01611f18565b945061211d8c60c08d01611ff6565b935061212c6101808c01611f18565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe608201121561215e57600080fd5b50612167611faa565b6121746101a08c01611f18565b81526121836101c08c01611f18565b60208201526121956101e08c01611f18565b60408201526121a76102008c01611f18565b60608201526121b96102208c01611f18565b60808201526121cb6102408c01611f18565b60a08201526121dd6102608c01611f18565b60c0820152809150509295985092959850929598565b60005b8381101561220e5781810151838201526020016121f6565b838111156110615750506000910152565b600081518084526122378160208601602086016121f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f5c602083018461221f565b6000806040838503121561228f57600080fd5b50508035926020909101359150565b6000602082840312156122b057600080fd5b611f5c82611f63565b600060c082840312156122cb57600080fd5b611f5c8383611ff6565b6000602082840312156122e757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561232f5761232f6122ee565b500390565b600067ffffffffffffffff808316818516808303821115612357576123576122ee565b01949350505050565b60006020828403121561237257600080fd5b8151611f5c81611fe7565b60006020828403121561238f57600080fd5b815167ffffffffffffffff808211156123a757600080fd5b818401915084601f8301126123bb57600080fd5b8151818111156123cd576123cd611f7b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561241357612413611f7b565b8160405282815287602084870101111561242c57600080fd5b61243d8360208301602088016121f3565b979650505050505050565b600063ffffffff808316818516808303821115612357576123576122ee565b600063ffffffff808416806124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156124d4576124d46122ee565b0294935050505056fea164736f6c634300080f000a"; bytes internal constant l1StandardBridgeCode = - hex"6080604052600436106101795760003560e01c80637f46ddb2116100cb578063927ede2d1161007f578063b1a1a88211610059578063b1a1a882146104fe578063c89701a214610511578063e11013dd1461053e57600080fd5b8063927ede2d146104a05780639a2ac6d5146104cb578063a9f9e675146104de57600080fd5b806387087623116100b0578063870876231461043a5780638f601f661461045a57806391c49bf8146103ef57600080fd5b80637f46ddb2146103ef578063838b25201461041a57600080fd5b80633cb747bf1161012d57806354fd4d501161010757806354fd4d501461035457806358a997f6146103aa5780635c975abb146103ca57600080fd5b80633cb747bf146102e7578063485cc95514610314578063540abf731461033457600080fd5b80631532ec341161015e5780631532ec341461026a5780631635f5fd1461027d57806335e80ab31461029057600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b15610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610230333362030d406040518060200160405280600081525061056d565b005b600080fd5b34801561024357600080fd5b506102306102523660046126b1565b610580565b610230610265366004612762565b61099a565b6102306102783660046127b5565b610a71565b61023061028b3660046127b5565b610a85565b34801561029c57600080fd5b506032546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102f357600080fd5b506003546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032057600080fd5b5061023061032f366004612828565b610f4e565b34801561034057600080fd5b5061023061034f366004612861565b611137565b34801561036057600080fd5b5061039d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102de919061294e565b3480156103b657600080fd5b506102306103c5366004612961565b61117c565b3480156103d657600080fd5b506103df611250565b60405190151581526020016102de565b3480156103fb57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102bd565b34801561042657600080fd5b50610230610435366004612861565b6112e9565b34801561044657600080fd5b50610230610455366004612961565b61132e565b34801561046657600080fd5b50610492610475366004612828565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102de565b3480156104ac57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102bd565b6102306104d93660046129e4565b611402565b3480156104ea57600080fd5b506102306104f93660046126b1565b611444565b61023061050c366004612762565b611453565b34801561051d57600080fd5b506004546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b61023061054c3660046129e4565b611524565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61057a8484348585611567565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610653575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063b9190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b61070d611250565b15610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b61077d87611731565b156108cb5761078c8787611793565b61083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5050505061094d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610909908490612a93565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561094d9085856118b3565b610991878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061198792505050565b50505050505050565b333b15610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b505050565b610a7e8585858585610a85565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b58575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b610c12611250565b15610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b823414610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610209565b3073ffffffffffffffffffffffffffffffffffffffff851603610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610209565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610209565b610e9a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a1592505050565b6000610eb7855a8660405180602001604052806000815250611a88565b905080610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610209565b505050505050565b600054610100900460ff1615808015610f6e5750600054600160ff909116105b80610f885750303b158015610f88575060005460ff166001145b611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610209565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556110d083734200000000000000000000000000000000000010611aa2565b8015610a6c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b333b1561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190612aaa565b905090565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b333b156113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b61057a33858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61099187878787878787610580565b333b156114e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c33338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61057a3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b8234146115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610209565b61160285858584611ec6565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611665908b908b9086908a90602401612acc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116f892918890600401612b15565b6000604051808303818588803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b50505050505050505050565b600061175d827f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b8061178d575061178d827fec4fc8e300000000000000000000000000000000000000000000000000000000611f39565b92915050565b60006117bf837f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b15611868578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118339190612a47565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061178d565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a6c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f5c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b38686866040516119ff93929190612b5a565b60405180910390a4610f46868686868686612068565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611a74929190612b98565b60405180910390a361057a848484846120f0565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610209565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b611b9587611731565b15611ce357611ba48787611793565b611c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b50505050611d77565b611d0573ffffffffffffffffffffffffffffffffffffffff881686308661215d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611d43908490612bb1565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611d858787878787866121bb565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611de9908b908d908c908c908c908b90602401612bc9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611e7c92918790600401612b15565b600060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b5050505050505050505050565b61099187878787878787611b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051611f25929190612b98565b60405180910390a361057a84848484612249565b6000611f44836122a8565b8015611f555750611f55838361230c565b9392505050565b6000611fbe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123db9092919063ffffffff16565b805190915015610a6c5780806020019051810190611fdc9190612aaa565b610a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610209565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516120e093929190612b5a565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161214f929190612b98565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261057a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611905565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161223393929190612b5a565b60405180910390a4610f468686868686866123f2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161214f929190612b98565b60006122d4827f01ffc9a70000000000000000000000000000000000000000000000000000000061230c565b801561178d5750612305827fffffffff0000000000000000000000000000000000000000000000000000000061230c565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156123c4575060208210155b80156123d05750600081115b979650505050505050565b60606123ea848460008561246a565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516120e093929190612b5a565b6060824710156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610209565b73ffffffffffffffffffffffffffffffffffffffff85163b61257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610209565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a39190612c24565b60006040518083038185875af1925050503d80600081146125e0576040519150601f19603f3d011682016040523d82523d6000602084013e6125e5565b606091505b50915091506123d0828286606083156125ff575081611f55565b82511561260f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610209919061294e565b73ffffffffffffffffffffffffffffffffffffffff8116811461266557600080fd5b50565b60008083601f84011261267a57600080fd5b50813567ffffffffffffffff81111561269257600080fd5b6020830191508360208285010111156126aa57600080fd5b9250929050565b600080600080600080600060c0888a0312156126cc57600080fd5b87356126d781612643565b965060208801356126e781612643565b955060408801356126f781612643565b9450606088013561270781612643565b93506080880135925060a088013567ffffffffffffffff81111561272a57600080fd5b6127368a828b01612668565b989b979a50959850939692959293505050565b803563ffffffff8116811461275d57600080fd5b919050565b60008060006040848603121561277757600080fd5b61278084612749565b9250602084013567ffffffffffffffff81111561279c57600080fd5b6127a886828701612668565b9497909650939450505050565b6000806000806000608086880312156127cd57600080fd5b85356127d881612643565b945060208601356127e881612643565b935060408601359250606086013567ffffffffffffffff81111561280b57600080fd5b61281788828901612668565b969995985093965092949392505050565b6000806040838503121561283b57600080fd5b823561284681612643565b9150602083013561285681612643565b809150509250929050565b600080600080600080600060c0888a03121561287c57600080fd5b873561288781612643565b9650602088013561289781612643565b955060408801356128a781612643565b9450606088013593506128bc60808901612749565b925060a088013567ffffffffffffffff81111561272a57600080fd5b60005b838110156128f35781810151838201526020016128db565b8381111561057a5750506000910152565b6000815180845261291c8160208601602086016128d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f556020830184612904565b60008060008060008060a0878903121561297a57600080fd5b863561298581612643565b9550602087013561299581612643565b9450604087013593506129aa60608801612749565b9250608087013567ffffffffffffffff8111156129c657600080fd5b6129d289828a01612668565b979a9699509497509295939492505050565b600080600080606085870312156129fa57600080fd5b8435612a0581612643565b9350612a1360208601612749565b9250604085013567ffffffffffffffff811115612a2f57600080fd5b612a3b87828801612668565b95989497509550505050565b600060208284031215612a5957600080fd5b8151611f5581612643565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612aa557612aa5612a64565b500390565b600060208284031215612abc57600080fd5b81518015158114611f5557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612b0b6080830184612904565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612b446060830185612904565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612b8f6060830184612904565b95945050505050565b8281526040602082015260006123ea6040830184612904565b60008219821115612bc457612bc4612a64565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c1860c0830184612904565b98975050505050505050565b60008251612c368184602087016128d8565b919091019291505056fea164736f6c634300080f000a"; + hex"60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a"; bytes internal constant l1ERC721BridgeCode = hex"608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a"; } diff --git a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol new file mode 100644 index 00000000000..6adbc91faf0 --- /dev/null +++ b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: MIT +pragma solidity 0.8.15; + +// Target contract +import { GasPayingToken } from "src/libraries/GasPayingToken.sol"; +import { Constants } from "src/libraries/Constants.sol"; +import { Test } from "forge-std/Test.sol"; +import { LibString } from "@solady/utils/LibString.sol"; + +/// @title GasPayingToken_Roundtrip_Test +/// @notice Tests the roundtrip of setting and getting the gas paying token. +contract GasPayingToken_Roundtrip_Test is Test { + /// @dev Test that the gas paying token correctly sets values in storage. + function testFuzz_set_succeeds(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) external { + GasPayingToken.set(_token, _decimals, _name, _symbol); + + // Check the token address and decimals + assertEq( + bytes32(uint256(_decimals) << 160 | uint256(uint160(_token))), + vm.load(address(this), GasPayingToken.GAS_PAYING_TOKEN_SLOT) + ); + + // Check the token name + assertEq(_name, vm.load(address(this), GasPayingToken.GAS_PAYING_TOKEN_NAME_SLOT)); + + // Check the token symbol + assertEq(_symbol, vm.load(address(this), GasPayingToken.GAS_PAYING_TOKEN_SYMBOL_SLOT)); + } + + /// @dev Test that the gas paying token returns values associated with Ether when unset. + function test_get_empty_succeeds() external { + (address token, uint8 decimals) = GasPayingToken.getToken(); + assertEq(Constants.ETHER, token); + assertEq(18, decimals); + + assertEq("Ether", GasPayingToken.getName()); + + assertEq("ETH", GasPayingToken.getSymbol()); + } + + /// @dev Test that the gas paying token correctly gets values from storage when set. + function testFuzz_get_nonEmpty_succeeds(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) external { + vm.assume(_token != address(0)); + + GasPayingToken.set(_token, _decimals, _name, _symbol); + + (address token, uint8 decimals) = GasPayingToken.getToken(); + assertEq(_token, token); + assertEq(_decimals, decimals); + + assertEq(LibString.fromSmallString(_name), GasPayingToken.getName()); + + assertEq(LibString.fromSmallString(_symbol), GasPayingToken.getSymbol()); + } + + /// @dev Test that the gas paying token correctly sets values in storage when input name and symbol are strings. + function testFuzz_setGetWithSanitize_succeeds( + address _token, + uint8 _decimals, + string memory _name, + string memory _symbol + ) + external + { + vm.assume(_token != address(0)); + vm.assume(bytes(_name).length <= 32); + vm.assume(bytes(_symbol).length <= 32); + + GasPayingToken.set(_token, _decimals, GasPayingToken.sanitize(_name), GasPayingToken.sanitize(_symbol)); + + (address token, uint8 decimals) = GasPayingToken.getToken(); + assertEq(_token, token); + assertEq(_decimals, decimals); + + assertEq(_name, GasPayingToken.getName()); + assertEq(_symbol, GasPayingToken.getSymbol()); + } + + /// @dev Differentially test `sanitize`. + function testDiff_sanitize_succeeds(string memory _str) external { + vm.assume(bytes(_str).length <= 32); + vm.assume(bytes(_str).length > 0); + + bytes32 output; + uint256 len = bytes(_str).length; + + assembly { + output := mload(add(_str, 0x20)) + } + + output = (output >> 32 - len) << 32 - len; + + assertEq(output, GasPayingToken.sanitize(_str)); + } + + /// @dev Test that `sanitize` fails when the input string is too long. + function test_sanitize_stringTooLong_fails(string memory _str) external { + vm.assume(bytes(_str).length > 32); + + vm.expectRevert("GasPayingToken: string cannot be greater than 32 bytes"); + + GasPayingToken.sanitize(_str); + } + + /// @dev Test that `sanitize` works as expected when the input string is empty. + function test_sanitize_empty_succeeds() external { + assertEq(GasPayingToken.sanitize(""), ""); + } +} diff --git a/packages/contracts-bedrock/test/setup/CommonTest.sol b/packages/contracts-bedrock/test/setup/CommonTest.sol index a37a510cfb0..25c8e1764d0 100644 --- a/packages/contracts-bedrock/test/setup/CommonTest.sol +++ b/packages/contracts-bedrock/test/setup/CommonTest.sol @@ -19,6 +19,7 @@ contract CommonTest is Test, Setup, Events { bool usePlasmaOverride; bool useFaultProofs; + address customGasToken; function setUp() public virtual override { alice = makeAddr("alice"); @@ -28,13 +29,16 @@ contract CommonTest is Test, Setup, Events { Setup.setUp(); - // Override the plasma config after the deploy script initialized the config + // Override the config after the deploy script initialized the config if (usePlasmaOverride) { deploy.cfg().setUsePlasma(true); } if (useFaultProofs) { deploy.cfg().setUseFaultProofs(true); } + if (customGasToken != address(0)) { + deploy.cfg().setUseCustomGasToken(customGasToken); + } vm.etch(address(ffi), vm.getDeployedCode("FFIInterface.sol:FFIInterface")); vm.label(address(ffi), "FFIInterface"); @@ -119,4 +123,14 @@ contract CommonTest is Test, Setup, Events { usePlasmaOverride = true; } + + function enableCustomGasToken(address _token) public { + // Check if the system has already been deployed, based off of the heuristic that alice and bob have not been + // set by the `setUp` function yet. + if (!(alice == address(0) && bob == address(0))) { + revert("CommonTest: Cannot enable custom gas token after deployment. Consider overriding `setUp`."); + } + + customGasToken = _token; + } } diff --git a/packages/contracts-bedrock/test/setup/Setup.sol b/packages/contracts-bedrock/test/setup/Setup.sol index d294905cdf9..8d319dfd830 100644 --- a/packages/contracts-bedrock/test/setup/Setup.sol +++ b/packages/contracts-bedrock/test/setup/Setup.sol @@ -38,6 +38,7 @@ import { Executables } from "scripts/Executables.sol"; import { Vm } from "forge-std/Vm.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; import { DataAvailabilityChallenge } from "src/L1/DataAvailabilityChallenge.sol"; +import { WETH } from "src/L2/WETH.sol"; /// @title Setup /// @dev This contact is responsible for setting up the contracts in state. It currently @@ -90,6 +91,7 @@ contract Setup { L1Block l1Block = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES); LegacyMessagePasser legacyMessagePasser = LegacyMessagePasser(Predeploys.LEGACY_MESSAGE_PASSER); GovernanceToken governanceToken = GovernanceToken(Predeploys.GOVERNANCE_TOKEN); + WETH weth = WETH(payable(Predeploys.WETH)); /// @dev Deploys the Deploy contract without including its bytecode in the bytecode /// of this contract by fetching the bytecode dynamically using `vm.getCode()`. @@ -205,6 +207,7 @@ contract Setup { labelPredeploy(Predeploys.GOVERNANCE_TOKEN); labelPredeploy(Predeploys.EAS); labelPredeploy(Predeploys.SCHEMA_REGISTRY); + labelPredeploy(Predeploys.WETH); // L2 Preinstalls labelPreinstall(Preinstalls.MultiCall3); diff --git a/packages/contracts-bedrock/test/universal/StandardBridge.t.sol b/packages/contracts-bedrock/test/universal/StandardBridge.t.sol index e901467f861..c09362fd6fb 100644 --- a/packages/contracts-bedrock/test/universal/StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/universal/StandardBridge.t.sol @@ -5,6 +5,7 @@ import { StandardBridge } from "src/universal/StandardBridge.sol"; import { CommonTest } from "test/setup/CommonTest.sol"; import { OptimismMintableERC20, ILegacyMintableERC20 } from "src/universal/OptimismMintableERC20.sol"; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; +import { Constants } from "src/libraries/Constants.sol"; /// @title StandardBridgeTester /// @notice Simple wrapper around the StandardBridge contract that exposes @@ -20,6 +21,10 @@ contract StandardBridgeTester is StandardBridge { return _isCorrectTokenPair(_mintableToken, _otherToken); } + function gasPayingToken() public pure override returns (address, uint8) { + return (Constants.ETHER, 18); + } + receive() external payable override { } } diff --git a/packages/contracts-bedrock/test/vendor/Initializable.t.sol b/packages/contracts-bedrock/test/vendor/Initializable.t.sol index 6409d0c3d9a..7bfdfb3adac 100644 --- a/packages/contracts-bedrock/test/vendor/Initializable.t.sol +++ b/packages/contracts-bedrock/test/vendor/Initializable.t.sol @@ -60,7 +60,9 @@ contract Initializer_Test is Bridge_Initializer { contracts.push( InitializeableContract({ target: deploy.mustGetAddress("L1CrossDomainMessenger"), - initCalldata: abi.encodeCall(l1CrossDomainMessenger.initialize, (superchainConfig, optimismPortal)), + initCalldata: abi.encodeCall( + l1CrossDomainMessenger.initialize, (superchainConfig, optimismPortal, systemConfig) + ), initializedSlotVal: deploy.loadInitializedSlot("L1CrossDomainMessenger") }) ); @@ -68,7 +70,9 @@ contract Initializer_Test is Bridge_Initializer { contracts.push( InitializeableContract({ target: address(l1CrossDomainMessenger), - initCalldata: abi.encodeCall(l1CrossDomainMessenger.initialize, (superchainConfig, optimismPortal)), + initCalldata: abi.encodeCall( + l1CrossDomainMessenger.initialize, (superchainConfig, optimismPortal, systemConfig) + ), initializedSlotVal: deploy.loadInitializedSlot("L1CrossDomainMessengerProxy") }) ); @@ -180,7 +184,8 @@ contract Initializer_Test is Bridge_Initializer { l1StandardBridge: address(0), disputeGameFactory: address(0), optimismPortal: address(0), - optimismMintableERC20Factory: address(0) + optimismMintableERC20Factory: address(0), + gasPayingToken: Constants.ETHER }) ) ), @@ -215,7 +220,8 @@ contract Initializer_Test is Bridge_Initializer { l1StandardBridge: address(0), disputeGameFactory: address(0), optimismPortal: address(0), - optimismMintableERC20Factory: address(0) + optimismMintableERC20Factory: address(0), + gasPayingToken: Constants.ETHER }) ) ), @@ -254,7 +260,9 @@ contract Initializer_Test is Bridge_Initializer { contracts.push( InitializeableContract({ target: deploy.mustGetAddress("L1StandardBridge"), - initCalldata: abi.encodeCall(l1StandardBridge.initialize, (l1CrossDomainMessenger, superchainConfig)), + initCalldata: abi.encodeCall( + l1StandardBridge.initialize, (l1CrossDomainMessenger, superchainConfig, systemConfig) + ), initializedSlotVal: deploy.loadInitializedSlot("L1StandardBridge") }) ); @@ -262,7 +270,9 @@ contract Initializer_Test is Bridge_Initializer { contracts.push( InitializeableContract({ target: address(l1StandardBridge), - initCalldata: abi.encodeCall(l1StandardBridge.initialize, (l1CrossDomainMessenger, superchainConfig)), + initCalldata: abi.encodeCall( + l1StandardBridge.initialize, (l1CrossDomainMessenger, superchainConfig, systemConfig) + ), initializedSlotVal: deploy.loadInitializedSlot("L1StandardBridgeProxy") }) ); From 34eede822f929887100a6171ab721bec13bfce60 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 16:27:56 -0600 Subject: [PATCH 06/45] op-bindings: update with custom gas token Co-authored-by: Diego <105765223+0xfuturistic@users.noreply.github.com> --- op-bindings/bindings/crossdomainmessenger.go | 44 +- op-bindings/bindings/l1block.go | 318 ++++- .../bindings/l1crossdomainmessenger.go | 125 +- op-bindings/bindings/l1standardbridge.go | 125 +- .../bindings/l2crossdomainmessenger.go | 70 +- op-bindings/bindings/l2standardbridge.go | 70 +- op-bindings/bindings/optimismportal.go | 122 +- op-bindings/bindings/standardbridge.go | 44 +- op-bindings/bindings/systemconfig.go | 124 +- op-bindings/bindings/weth.go | 1133 +++++++++++++++++ op-bindings/predeploys/addresses.go | 6 +- 11 files changed, 2132 insertions(+), 49 deletions(-) create mode 100644 op-bindings/bindings/weth.go diff --git a/op-bindings/bindings/crossdomainmessenger.go b/op-bindings/bindings/crossdomainmessenger.go index 516b49cbffa..8bfc6048119 100644 --- a/op-bindings/bindings/crossdomainmessenger.go +++ b/op-bindings/bindings/crossdomainmessenger.go @@ -30,7 +30,7 @@ var ( // CrossDomainMessengerMetaData contains all meta data concerning the CrossDomainMessenger contract. var CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", } // CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -675,6 +675,48 @@ func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) XDomainMessageSe return _CrossDomainMessenger.Contract.XDomainMessageSender(&_CrossDomainMessenger.CallOpts) } +// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() returns(address, uint8) +func (_CrossDomainMessenger *CrossDomainMessengerTransactor) GasPayingToken(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CrossDomainMessenger.contract.Transact(opts, "gasPayingToken") +} + +// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() returns(address, uint8) +func (_CrossDomainMessenger *CrossDomainMessengerSession) GasPayingToken() (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.GasPayingToken(&_CrossDomainMessenger.TransactOpts) +} + +// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() returns(address, uint8) +func (_CrossDomainMessenger *CrossDomainMessengerTransactorSession) GasPayingToken() (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.GasPayingToken(&_CrossDomainMessenger.TransactOpts) +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { + return _CrossDomainMessenger.contract.Transact(opts, "isCustomGasToken") +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerSession) IsCustomGasToken() (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.IsCustomGasToken(&_CrossDomainMessenger.TransactOpts) +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerTransactorSession) IsCustomGasToken() (*types.Transaction, error) { + return _CrossDomainMessenger.Contract.IsCustomGasToken(&_CrossDomainMessenger.TransactOpts) +} + // RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. // // Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() diff --git a/op-bindings/bindings/l1block.go b/op-bindings/bindings/l1block.go index 41a24ec3887..10cf2ef4293 100644 --- a/op-bindings/bindings/l1block.go +++ b/op-bindings/bindings/l1block.go @@ -30,8 +30,8 @@ var ( // L1BlockMetaData contains all meta data concerning the L1Block contract. var L1BlockMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEPOSITOR_ACCOUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1FeeOverhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1FeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"number\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setL1BlockValues\",\"inputs\":[{\"name\":\"_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_basefee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_l1FeeScalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesEcotone\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"timestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"}]", - Bin: "0x608060405234801561001057600080fd5b5061053e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638381f58a11610097578063c598591811610066578063c598591814610229578063e591b28214610249578063e81b2c6d14610289578063f82061401461029257600080fd5b80638381f58a146101e35780638b239f73146101f75780639e8c496614610200578063b80777ea1461020957600080fd5b806354fd4d50116100d357806354fd4d50146101335780635cf249691461017c57806364ca23ef1461018557806368d5dca6146101b257600080fd5b8063015d8eb9146100fa57806309bd5a601461010f578063440a5e201461012b575b600080fd5b61010d61010836600461044c565b61029b565b005b61011860025481565b6040519081526020015b60405180910390f35b61010d6103da565b61016f6040518060400160405280600581526020017f312e322e3000000000000000000000000000000000000000000000000000000081525081565b60405161012291906104be565b61011860015481565b6003546101999067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610122565b6003546101ce9068010000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610122565b6000546101999067ffffffffffffffff1681565b61011860055481565b61011860065481565b6000546101999068010000000000000000900467ffffffffffffffff1681565b6003546101ce906c01000000000000000000000000900463ffffffff1681565b61026473deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610122565b61011860045481565b61011860075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead000114610342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b3373deaddeaddeaddeaddeaddeaddeaddeaddead00011461040357633cc50b456000526004601cfd5b60043560801c60035560143560801c600055602435600155604435600755606435600255608435600455565b803567ffffffffffffffff8116811461044757600080fd5b919050565b600080600080600080600080610100898b03121561046957600080fd5b6104728961042f565b975061048060208a0161042f565b9650604089013595506060890135945061049c60808a0161042f565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156104eb578581018301518582016040015282016104cf565b818111156104fd576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"function\",\"name\":\"DEPOSITOR_ACCOUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1FeeOverhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1FeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"number\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGasPayingToken\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_symbol\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValues\",\"inputs\":[{\"name\":\"_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_basefee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_l1FeeScalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesEcotone\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"timestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"GasPayingTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"name\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"symbol\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"NotDepositor\",\"inputs\":[]}]", + Bin: "0x608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806371cfaa3f116100cd578063c598591811610081578063e591b28211610066578063e591b28214610331578063e81b2c6d14610371578063f82061401461037a57600080fd5b8063c598591814610309578063d84447151461032957600080fd5b80638b239f73116100b25780638b239f73146102d75780639e8c4966146102e0578063b80777ea146102e957600080fd5b806371cfaa3f146102b05780638381f58a146102c357600080fd5b806354fd4d50116101245780635cf24969116101095780635cf249691461024957806364ca23ef1461025257806368d5dca61461027f57600080fd5b806354fd4d50146101f8578063550fcdc91461024157600080fd5b8063213268491161015557806321326849146101a25780634397dfef146101ba578063440a5e20146101f057600080fd5b8063015d8eb91461017157806309bd5a6014610186575b600080fd5b61018461017f366004610953565b610383565b005b61018f60025481565b6040519081526020015b60405180910390f35b6101aa6104c2565b6040519015158152602001610199565b6101c2610501565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610199565b610184610515565b6102346040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b60405161019991906109c5565b61023461056a565b61018f60015481565b6003546102669067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610199565b60035461029b9068010000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610199565b6101846102be366004610a38565b610579565b6000546102669067ffffffffffffffff1681565b61018f60055481565b61018f60065481565b6000546102669068010000000000000000900467ffffffffffffffff1681565b60035461029b906c01000000000000000000000000900463ffffffff1681565b61023461062e565b61034c73deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610199565b61018f60045481565b61018f60075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead00011461042a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b6000806104cd610501565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60008061050c610638565b90939092509050565b3373deaddeaddeaddeaddeaddeaddeaddeaddead00011461053e57633cc50b456000526004601cfd5b60043560801c60035560143560801c600055602435600155604435600755606435600255608435600455565b60606105746106b9565b905090565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146105c6576040517f3cc50b4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105d28484848461077a565b604080518381526020810183905260ff85169173ffffffffffffffffffffffffffffffffffffffff8716917f10e43c4d58f3ef4edae7c1ca2e7f02d46b2cadbcc046737038527ed8486ffeb0910160405180910390a350505050565b606061057461084c565b6000808061066e61066a60017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec610a9d565b5490565b73ffffffffffffffffffffffffffffffffffffffff811693509050826106ad575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b606060006106c5610638565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161073e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b61077461076f61066a60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd05764610a9d565b610902565b91505090565b6107e06107a860017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec610a9d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61081361080e60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d610a9d565b839055565b61084661084160017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd05764610a9d565b829055565b50505050565b60606000610858610638565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016108d157505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b61077461076f61066a60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d610a9d565b60405160005b82811a1561091857600101610908565b80825260208201838152600082820152505060408101604052919050565b803567ffffffffffffffff8116811461094e57600080fd5b919050565b600080600080600080600080610100898b03121561097057600080fd5b61097989610936565b975061098760208a01610936565b965060408901359550606089013594506109a360808a01610936565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156109f2578581018301518582016040015282016109d6565b81811115610a04576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008060008060808587031215610a4e57600080fd5b843573ffffffffffffffffffffffffffffffffffffffff81168114610a7257600080fd5b9350602085013560ff81168114610a8857600080fd5b93969395505050506040820135916060013590565b600082821015610ad6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea164736f6c634300080f000a", } // L1BlockABI is the input ABI used to generate the binding from. @@ -387,6 +387,113 @@ func (_L1Block *L1BlockCallerSession) BlobBaseFeeScalar() (uint32, error) { return _L1Block.Contract.BlobBaseFeeScalar(&_L1Block.CallOpts) } +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L1Block *L1BlockCaller) GasPayingToken(opts *bind.CallOpts) (struct { + Addr common.Address + Decimals uint8 +}, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "gasPayingToken") + + outstruct := new(struct { + Addr common.Address + Decimals uint8 + }) + if err != nil { + return *outstruct, err + } + + outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) + + return *outstruct, err + +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L1Block *L1BlockSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _L1Block.Contract.GasPayingToken(&_L1Block.CallOpts) +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L1Block *L1BlockCallerSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _L1Block.Contract.GasPayingToken(&_L1Block.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L1Block *L1BlockCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "gasPayingTokenName") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L1Block *L1BlockSession) GasPayingTokenName() (string, error) { + return _L1Block.Contract.GasPayingTokenName(&_L1Block.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L1Block *L1BlockCallerSession) GasPayingTokenName() (string, error) { + return _L1Block.Contract.GasPayingTokenName(&_L1Block.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L1Block *L1BlockCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "gasPayingTokenSymbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L1Block *L1BlockSession) GasPayingTokenSymbol() (string, error) { + return _L1Block.Contract.GasPayingTokenSymbol(&_L1Block.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L1Block *L1BlockCallerSession) GasPayingTokenSymbol() (string, error) { + return _L1Block.Contract.GasPayingTokenSymbol(&_L1Block.CallOpts) +} + // Hash is a free data retrieval call binding the contract method 0x09bd5a60. // // Solidity: function hash() view returns(bytes32) @@ -418,6 +525,37 @@ func (_L1Block *L1BlockCallerSession) Hash() ([32]byte, error) { return _L1Block.Contract.Hash(&_L1Block.CallOpts) } +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L1Block *L1BlockCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "isCustomGasToken") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L1Block *L1BlockSession) IsCustomGasToken() (bool, error) { + return _L1Block.Contract.IsCustomGasToken(&_L1Block.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L1Block *L1BlockCallerSession) IsCustomGasToken() (bool, error) { + return _L1Block.Contract.IsCustomGasToken(&_L1Block.CallOpts) +} + // L1FeeOverhead is a free data retrieval call binding the contract method 0x8b239f73. // // Solidity: function l1FeeOverhead() view returns(uint256) @@ -604,6 +742,27 @@ func (_L1Block *L1BlockCallerSession) Version() (string, error) { return _L1Block.Contract.Version(&_L1Block.CallOpts) } +// SetGasPayingToken is a paid mutator transaction binding the contract method 0x71cfaa3f. +// +// Solidity: function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) returns() +func (_L1Block *L1BlockTransactor) SetGasPayingToken(opts *bind.TransactOpts, _token common.Address, _decimals uint8, _name [32]byte, _symbol [32]byte) (*types.Transaction, error) { + return _L1Block.contract.Transact(opts, "setGasPayingToken", _token, _decimals, _name, _symbol) +} + +// SetGasPayingToken is a paid mutator transaction binding the contract method 0x71cfaa3f. +// +// Solidity: function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) returns() +func (_L1Block *L1BlockSession) SetGasPayingToken(_token common.Address, _decimals uint8, _name [32]byte, _symbol [32]byte) (*types.Transaction, error) { + return _L1Block.Contract.SetGasPayingToken(&_L1Block.TransactOpts, _token, _decimals, _name, _symbol) +} + +// SetGasPayingToken is a paid mutator transaction binding the contract method 0x71cfaa3f. +// +// Solidity: function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) returns() +func (_L1Block *L1BlockTransactorSession) SetGasPayingToken(_token common.Address, _decimals uint8, _name [32]byte, _symbol [32]byte) (*types.Transaction, error) { + return _L1Block.Contract.SetGasPayingToken(&_L1Block.TransactOpts, _token, _decimals, _name, _symbol) +} + // SetL1BlockValues is a paid mutator transaction binding the contract method 0x015d8eb9. // // Solidity: function setL1BlockValues(uint64 _number, uint64 _timestamp, uint256 _basefee, bytes32 _hash, uint64 _sequenceNumber, bytes32 _batcherHash, uint256 _l1FeeOverhead, uint256 _l1FeeScalar) returns() @@ -645,3 +804,158 @@ func (_L1Block *L1BlockSession) SetL1BlockValuesEcotone() (*types.Transaction, e func (_L1Block *L1BlockTransactorSession) SetL1BlockValuesEcotone() (*types.Transaction, error) { return _L1Block.Contract.SetL1BlockValuesEcotone(&_L1Block.TransactOpts) } + +// L1BlockGasPayingTokenSetIterator is returned from FilterGasPayingTokenSet and is used to iterate over the raw logs and unpacked data for GasPayingTokenSet events raised by the L1Block contract. +type L1BlockGasPayingTokenSetIterator struct { + Event *L1BlockGasPayingTokenSet // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *L1BlockGasPayingTokenSetIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(L1BlockGasPayingTokenSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(L1BlockGasPayingTokenSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *L1BlockGasPayingTokenSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *L1BlockGasPayingTokenSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// L1BlockGasPayingTokenSet represents a GasPayingTokenSet event raised by the L1Block contract. +type L1BlockGasPayingTokenSet struct { + Token common.Address + Decimals uint8 + Name [32]byte + Symbol [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterGasPayingTokenSet is a free log retrieval operation binding the contract event 0x10e43c4d58f3ef4edae7c1ca2e7f02d46b2cadbcc046737038527ed8486ffeb0. +// +// Solidity: event GasPayingTokenSet(address indexed token, uint8 indexed decimals, bytes32 name, bytes32 symbol) +func (_L1Block *L1BlockFilterer) FilterGasPayingTokenSet(opts *bind.FilterOpts, token []common.Address, decimals []uint8) (*L1BlockGasPayingTokenSetIterator, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var decimalsRule []interface{} + for _, decimalsItem := range decimals { + decimalsRule = append(decimalsRule, decimalsItem) + } + + logs, sub, err := _L1Block.contract.FilterLogs(opts, "GasPayingTokenSet", tokenRule, decimalsRule) + if err != nil { + return nil, err + } + return &L1BlockGasPayingTokenSetIterator{contract: _L1Block.contract, event: "GasPayingTokenSet", logs: logs, sub: sub}, nil +} + +// WatchGasPayingTokenSet is a free log subscription operation binding the contract event 0x10e43c4d58f3ef4edae7c1ca2e7f02d46b2cadbcc046737038527ed8486ffeb0. +// +// Solidity: event GasPayingTokenSet(address indexed token, uint8 indexed decimals, bytes32 name, bytes32 symbol) +func (_L1Block *L1BlockFilterer) WatchGasPayingTokenSet(opts *bind.WatchOpts, sink chan<- *L1BlockGasPayingTokenSet, token []common.Address, decimals []uint8) (event.Subscription, error) { + + var tokenRule []interface{} + for _, tokenItem := range token { + tokenRule = append(tokenRule, tokenItem) + } + var decimalsRule []interface{} + for _, decimalsItem := range decimals { + decimalsRule = append(decimalsRule, decimalsItem) + } + + logs, sub, err := _L1Block.contract.WatchLogs(opts, "GasPayingTokenSet", tokenRule, decimalsRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(L1BlockGasPayingTokenSet) + if err := _L1Block.contract.UnpackLog(event, "GasPayingTokenSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseGasPayingTokenSet is a log parse operation binding the contract event 0x10e43c4d58f3ef4edae7c1ca2e7f02d46b2cadbcc046737038527ed8486ffeb0. +// +// Solidity: event GasPayingTokenSet(address indexed token, uint8 indexed decimals, bytes32 name, bytes32 symbol) +func (_L1Block *L1BlockFilterer) ParseGasPayingTokenSet(log types.Log) (*L1BlockGasPayingTokenSet, error) { + event := new(L1BlockGasPayingTokenSet) + if err := _L1Block.contract.UnpackLog(event, "GasPayingTokenSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/bindings/l1crossdomainmessenger.go b/op-bindings/bindings/l1crossdomainmessenger.go index 0aa353e32af..e4cd10aff32 100644 --- a/op-bindings/bindings/l1crossdomainmessenger.go +++ b/op-bindings/bindings/l1crossdomainmessenger.go @@ -30,8 +30,8 @@ var ( // L1CrossDomainMessengerMetaData contains all meta data concerning the L1CrossDomainMessenger contract. var L1CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PORTAL\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_portal\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001f60008062000025565b6200027f565b600054600160a81b900460ff16158080156200004e57506000546001600160a01b90910460ff16105b806200008557506200006b30620001b960201b620014d61760201c565b158015620000855750600054600160a01b900460ff166001145b620000ee5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011c576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038086166001600160a01b03199283161790925560fc8054928516929091169190911790556200016b734200000000000000000000000000000000000007620001c8565b8015620001b4576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002375760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e5565b60cc546001600160a01b03166200025d5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611f94806200028f6000396000f3fe6080604052600436106101805760003560e01c80635c975abb116100d6578063a4e7f8bd1161007f578063d764ad0b11610059578063d764ad0b14610463578063db505d8014610476578063ecc70428146104a357600080fd5b8063a4e7f8bd146103e3578063b1b1b20914610413578063b28ade251461044357600080fd5b806383a74074116100b057806383a74074146103a15780638cbeeef2146102b85780639fce812c146103b857600080fd5b80635c975abb1461033a5780636425666b1461035f5780636e296e451461038c57600080fd5b80633dbb202b116101385780634c1d6a69116101125780634c1d6a69146102b857806354fd4d50146102ce5780635644cfdf1461032457600080fd5b80633dbb202b1461025b5780633f827a5a14610270578063485cc9551461029857600080fd5b80630ff754ea116101695780630ff754ea146101cd5780632828d7e81461021957806335e80ab31461022e57600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561022557600080fd5b5061019a604081565b34801561023a57600080fd5b5060fb546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b61026e610269366004611a22565b610508565b005b34801561027c57600080fd5b50610285600181565b60405161ffff90911681526020016101af565b3480156102a457600080fd5b5061026e6102b3366004611a89565b610765565b3480156102c457600080fd5b5061019a619c4081565b3480156102da57600080fd5b506103176040518060400160405280600581526020017f322e332e3000000000000000000000000000000000000000000000000000000081525081565b6040516101af9190611b2d565b34801561033057600080fd5b5061019a61138881565b34801561034657600080fd5b5061034f6109d3565b60405190151581526020016101af565b34801561036b57600080fd5b5060fc546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039857600080fd5b506101f4610a6c565b3480156103ad57600080fd5b5061019a62030d4081565b3480156103c457600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101f4565b3480156103ef57600080fd5b5061034f6103fe366004611b47565b60ce6020526000908152604090205460ff1681565b34801561041f57600080fd5b5061034f61042e366004611b47565b60cb6020526000908152604090205460ff1681565b34801561044f57600080fd5b5061019a61045e366004611b60565b610b53565b61026e610471366004611bb4565b610bc1565b34801561048257600080fd5b5060cf546101f49073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104af57600080fd5b506104fa60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b60cf5461063a9073ffffffffffffffffffffffffffffffffffffffff16610530858585610b53565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061059c60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016105b89796959493929190611c83565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114f2565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856106bf60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516106d1959493929190611ce2565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b6000547501000000000000000000000000000000000000000000900460ff16158080156107b0575060005460017401000000000000000000000000000000000000000090910460ff16105b806107e25750303b1580156107e2575060005474010000000000000000000000000000000000000000900460ff166001145b610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156108f957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc80549285169290911691909117905561096b73420000000000000000000000000000000000000761158b565b80156109ce57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a679190611d30565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f74207365740000000000000000000000606482015260840161086a565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b6f604063ffffffff8816611d81565b610b799190611db1565b610b84601088611d81565b610b919062030d40611dff565b610b9b9190611dff565b610ba59190611dff565b610baf9190611dff565b610bb99190611dff565b949350505050565b610bc96109d3565b15610c30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a2070617573656400000000604482015260640161086a565b60f087901c60028110610ceb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161086a565b8061ffff16600003610de0576000610d3c878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610dde576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161086a565b505b6000610e26898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e30611709565b15610e6857853414610e4457610e44611e2b565b600081815260ce602052604090205460ff1615610e6357610e63611e2b565b610fba565b3415610f1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161086a565b600081815260ce602052604090205460ff16610fba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161086a565b610fc3876117e5565b15611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161086a565b600081815260cb602052604090205460ff1615611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161086a565b61113685611127611388619c40611dff565b67ffffffffffffffff1661182b565b158061115c575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561127557600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161126e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b50506114cd565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061130688619c405a6112c99190611e5a565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061184992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113bc57600082815260cb602052604090205460ff161561135957611359611e2b565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114c9565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114c9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161086a565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611553908890839089906000908990600401611e71565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161086a565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611863565b805190602001209050949350505050565b60006116f68787878787876118fc565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a67575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190611ec9565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611825575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60608484848460405160240161187c9493929190611ee6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161191996959493929190611f30565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146119bd57600080fd5b50565b60008083601f8401126119d257600080fd5b50813567ffffffffffffffff8111156119ea57600080fd5b602083019150836020828501011115611a0257600080fd5b9250929050565b803563ffffffff81168114611a1d57600080fd5b919050565b60008060008060608587031215611a3857600080fd5b8435611a438161199b565b9350602085013567ffffffffffffffff811115611a5f57600080fd5b611a6b878288016119c0565b9094509250611a7e905060408601611a09565b905092959194509250565b60008060408385031215611a9c57600080fd5b8235611aa78161199b565b91506020830135611ab78161199b565b809150509250929050565b6000815180845260005b81811015611ae857602081850181015186830182015201611acc565b81811115611afa576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b406020830184611ac2565b9392505050565b600060208284031215611b5957600080fd5b5035919050565b600080600060408486031215611b7557600080fd5b833567ffffffffffffffff811115611b8c57600080fd5b611b98868287016119c0565b9094509250611bab905060208501611a09565b90509250925092565b600080600080600080600060c0888a031215611bcf57600080fd5b873596506020880135611be18161199b565b95506040880135611bf18161199b565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611c1b57600080fd5b611c278a828b016119c0565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611cd560c083018486611c3a565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611d12608083018688611c3a565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611d4257600080fd5b81518015158114611b4057600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611da857611da8611d52565b02949350505050565b600067ffffffffffffffff80841680611df3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611e2257611e22611d52565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611e6c57611e6c611d52565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a060808201526000611ebe60a0830184611ac2565b979650505050505050565b600060208284031215611edb57600080fd5b8151611b408161199b565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611f1f6080830185611ac2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611f7b60c0830184611ac2565b9897505050505050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PORTAL\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"_addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_portal\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", } // L1CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -573,6 +573,51 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) FailedMessag return _L1CrossDomainMessenger.Contract.FailedMessages(&_L1CrossDomainMessenger.CallOpts, arg0) } +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address _addr, uint8 _decimals) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) GasPayingToken(opts *bind.CallOpts) (struct { + Addr common.Address + Decimals uint8 +}, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "gasPayingToken") + + outstruct := new(struct { + Addr common.Address + Decimals uint8 + }) + if err != nil { + return *outstruct, err + } + + outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) + + return *outstruct, err + +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address _addr, uint8 _decimals) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _L1CrossDomainMessenger.Contract.GasPayingToken(&_L1CrossDomainMessenger.CallOpts) +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address _addr, uint8 _decimals) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _L1CrossDomainMessenger.Contract.GasPayingToken(&_L1CrossDomainMessenger.CallOpts) +} + // MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // // Solidity: function messageNonce() view returns(uint256) @@ -759,6 +804,37 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) SuperchainCo return _L1CrossDomainMessenger.Contract.SuperchainConfig(&_L1CrossDomainMessenger.CallOpts) } +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) SystemConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "systemConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) SystemConfig() (common.Address, error) { + return _L1CrossDomainMessenger.Contract.SystemConfig(&_L1CrossDomainMessenger.CallOpts) +} + +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) SystemConfig() (common.Address, error) { + return _L1CrossDomainMessenger.Contract.SystemConfig(&_L1CrossDomainMessenger.CallOpts) +} + // Version is a free data retrieval call binding the contract method 0x54fd4d50. // // Solidity: function version() view returns(string) @@ -821,25 +897,46 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) XDomainMessa return _L1CrossDomainMessenger.Contract.XDomainMessageSender(&_L1CrossDomainMessenger.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _superchainConfig, address _portal, address _systemConfig) returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) Initialize(opts *bind.TransactOpts, _superchainConfig common.Address, _portal common.Address, _systemConfig common.Address) (*types.Transaction, error) { + return _L1CrossDomainMessenger.contract.Transact(opts, "initialize", _superchainConfig, _portal, _systemConfig) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _superchainConfig, address _portal, address _systemConfig) returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Initialize(_superchainConfig common.Address, _portal common.Address, _systemConfig common.Address) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _superchainConfig, _portal, _systemConfig) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _superchainConfig, address _portal, address _systemConfig) returns() +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) Initialize(_superchainConfig common.Address, _portal common.Address, _systemConfig common.Address) (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _superchainConfig, _portal, _systemConfig) +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. // -// Solidity: function initialize(address _superchainConfig, address _portal) returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) Initialize(opts *bind.TransactOpts, _superchainConfig common.Address, _portal common.Address) (*types.Transaction, error) { - return _L1CrossDomainMessenger.contract.Transact(opts, "initialize", _superchainConfig, _portal) +// Solidity: function isCustomGasToken() returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1CrossDomainMessenger.contract.Transact(opts, "isCustomGasToken") } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. // -// Solidity: function initialize(address _superchainConfig, address _portal) returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) Initialize(_superchainConfig common.Address, _portal common.Address) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _superchainConfig, _portal) +// Solidity: function isCustomGasToken() returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) IsCustomGasToken() (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.IsCustomGasToken(&_L1CrossDomainMessenger.TransactOpts) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. // -// Solidity: function initialize(address _superchainConfig, address _portal) returns() -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) Initialize(_superchainConfig common.Address, _portal common.Address) (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _superchainConfig, _portal) +// Solidity: function isCustomGasToken() returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) IsCustomGasToken() (*types.Transaction, error) { + return _L1CrossDomainMessenger.Contract.IsCustomGasToken(&_L1CrossDomainMessenger.TransactOpts) } // RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. diff --git a/op-bindings/bindings/l1standardbridge.go b/op-bindings/bindings/l1standardbridge.go index 619df3f3bcb..cdf80143e12 100644 --- a/op-bindings/bindings/l1standardbridge.go +++ b/op-bindings/bindings/l1standardbridge.go @@ -30,8 +30,8 @@ var ( // L1StandardBridgeMetaData contains all meta data concerning the L1StandardBridge contract. var L1StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositERC20\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositERC20To\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeERC20Withdrawal\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeETHWithdrawal\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_messenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l2TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20DepositInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20WithdrawalFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHDepositInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHWithdrawalFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001f60008062000025565b62000234565b600054610100900460ff1615808015620000465750600054600160ff909116105b8062000076575062000063306200018a60201b620005511760201c565b15801562000076575060005460ff166001145b620000df5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000103576000805461ff0019166101001790555b603280546001600160a01b0319166001600160a01b0384161790556200013e8373420000000000000000000000000000000000001062000199565b801562000185576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b600054610100900460ff16620002065760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d6565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612c4d80620002446000396000f3fe6080604052600436106101795760003560e01c80637f46ddb2116100cb578063927ede2d1161007f578063b1a1a88211610059578063b1a1a882146104fe578063c89701a214610511578063e11013dd1461053e57600080fd5b8063927ede2d146104a05780639a2ac6d5146104cb578063a9f9e675146104de57600080fd5b806387087623116100b0578063870876231461043a5780638f601f661461045a57806391c49bf8146103ef57600080fd5b80637f46ddb2146103ef578063838b25201461041a57600080fd5b80633cb747bf1161012d57806354fd4d501161010757806354fd4d501461035457806358a997f6146103aa5780635c975abb146103ca57600080fd5b80633cb747bf146102e7578063485cc95514610314578063540abf731461033457600080fd5b80631532ec341161015e5780631532ec341461026a5780631635f5fd1461027d57806335e80ab31461029057600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b15610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610230333362030d406040518060200160405280600081525061056d565b005b600080fd5b34801561024357600080fd5b506102306102523660046126b1565b610580565b610230610265366004612762565b61099a565b6102306102783660046127b5565b610a71565b61023061028b3660046127b5565b610a85565b34801561029c57600080fd5b506032546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102f357600080fd5b506003546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032057600080fd5b5061023061032f366004612828565b610f4e565b34801561034057600080fd5b5061023061034f366004612861565b611137565b34801561036057600080fd5b5061039d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102de919061294e565b3480156103b657600080fd5b506102306103c5366004612961565b61117c565b3480156103d657600080fd5b506103df611250565b60405190151581526020016102de565b3480156103fb57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102bd565b34801561042657600080fd5b50610230610435366004612861565b6112e9565b34801561044657600080fd5b50610230610455366004612961565b61132e565b34801561046657600080fd5b50610492610475366004612828565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102de565b3480156104ac57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102bd565b6102306104d93660046129e4565b611402565b3480156104ea57600080fd5b506102306104f93660046126b1565b611444565b61023061050c366004612762565b611453565b34801561051d57600080fd5b506004546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b61023061054c3660046129e4565b611524565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61057a8484348585611567565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610653575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063b9190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610705576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b61070d611250565b15610774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b61077d87611731565b156108cb5761078c8787611793565b61083e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b5050505061094d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610909908490612a93565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561094d9085856118b3565b610991878787878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061198792505050565b50505050505050565b333b15610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b505050565b610a7e8585858585610a85565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b58575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b409190612a47565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b610c12611250565b15610c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610209565b823414610d08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610209565b3073ffffffffffffffffffffffffffffffffffffffff851603610dad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610209565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610209565b610e9a85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a1592505050565b6000610eb7855a8660405180602001604052806000815250611a88565b905080610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610209565b505050505050565b600054610100900460ff1615808015610f6e5750600054600160ff909116105b80610f885750303b158015610f88575060005460ff166001145b611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610209565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561107257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556110d083734200000000000000000000000000000000000010611aa2565b8015610a6c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b333b1561120b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190612aaa565b905090565b61099187873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eb792505050565b333b156113bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610f4686863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b8c92505050565b61057a33858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61099187878787878787610580565b333b156114e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610a6c33338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061056d92505050565b61057a3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061156792505050565b8234146115f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610209565b61160285858584611ec6565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611665908b908b9086908a90602401612acc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116f892918890600401612b15565b6000604051808303818588803b15801561171157600080fd5b505af1158015611725573d6000803e3d6000fd5b50505050505050505050565b600061175d827f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b8061178d575061178d827fec4fc8e300000000000000000000000000000000000000000000000000000000611f39565b92915050565b60006117bf837f1d1d8b6300000000000000000000000000000000000000000000000000000000611f39565b15611868578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118339190612a47565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061178d565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa15801561180f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a6c9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f5c565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b38686866040516119ff93929190612b5a565b60405180910390a4610f46868686868686612068565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611a74929190612b98565b60405180910390a361057a848484846120f0565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611b39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610209565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b611b9587611731565b15611ce357611ba48787611793565b611c56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611cc657600080fd5b505af1158015611cda573d6000803e3d6000fd5b50505050611d77565b611d0573ffffffffffffffffffffffffffffffffffffffff881686308661215d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611d43908490612bb1565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611d858787878787866121bb565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611de9908b908d908c908c908c908b90602401612bc9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611e7c92918790600401612b15565b600060405180830381600087803b158015611e9657600080fd5b505af1158015611eaa573d6000803e3d6000fd5b5050505050505050505050565b61099187878787878787611b8c565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f238484604051611f25929190612b98565b60405180910390a361057a84848484612249565b6000611f44836122a8565b8015611f555750611f55838361230c565b9392505050565b6000611fbe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166123db9092919063ffffffff16565b805190915015610a6c5780806020019051810190611fdc9190612aaa565b610a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610209565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516120e093929190612b5a565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161214f929190612b98565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261057a9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611905565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161223393929190612b5a565b60405180910390a4610f468686868686866123f2565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161214f929190612b98565b60006122d4827f01ffc9a70000000000000000000000000000000000000000000000000000000061230c565b801561178d5750612305827fffffffff0000000000000000000000000000000000000000000000000000000061230c565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156123c4575060208210155b80156123d05750600081115b979650505050505050565b60606123ea848460008561246a565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516120e093929190612b5a565b6060824710156124fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610209565b73ffffffffffffffffffffffffffffffffffffffff85163b61257a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610209565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a39190612c24565b60006040518083038185875af1925050503d80600081146125e0576040519150601f19603f3d011682016040523d82523d6000602084013e6125e5565b606091505b50915091506123d0828286606083156125ff575081611f55565b82511561260f5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610209919061294e565b73ffffffffffffffffffffffffffffffffffffffff8116811461266557600080fd5b50565b60008083601f84011261267a57600080fd5b50813567ffffffffffffffff81111561269257600080fd5b6020830191508360208285010111156126aa57600080fd5b9250929050565b600080600080600080600060c0888a0312156126cc57600080fd5b87356126d781612643565b965060208801356126e781612643565b955060408801356126f781612643565b9450606088013561270781612643565b93506080880135925060a088013567ffffffffffffffff81111561272a57600080fd5b6127368a828b01612668565b989b979a50959850939692959293505050565b803563ffffffff8116811461275d57600080fd5b919050565b60008060006040848603121561277757600080fd5b61278084612749565b9250602084013567ffffffffffffffff81111561279c57600080fd5b6127a886828701612668565b9497909650939450505050565b6000806000806000608086880312156127cd57600080fd5b85356127d881612643565b945060208601356127e881612643565b935060408601359250606086013567ffffffffffffffff81111561280b57600080fd5b61281788828901612668565b969995985093965092949392505050565b6000806040838503121561283b57600080fd5b823561284681612643565b9150602083013561285681612643565b809150509250929050565b600080600080600080600060c0888a03121561287c57600080fd5b873561288781612643565b9650602088013561289781612643565b955060408801356128a781612643565b9450606088013593506128bc60808901612749565b925060a088013567ffffffffffffffff81111561272a57600080fd5b60005b838110156128f35781810151838201526020016128db565b8381111561057a5750506000910152565b6000815180845261291c8160208601602086016128d8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f556020830184612904565b60008060008060008060a0878903121561297a57600080fd5b863561298581612643565b9550602087013561299581612643565b9450604087013593506129aa60608801612749565b9250608087013567ffffffffffffffff8111156129c657600080fd5b6129d289828a01612668565b979a9699509497509295939492505050565b600080600080606085870312156129fa57600080fd5b8435612a0581612643565b9350612a1360208601612749565b9250604085013567ffffffffffffffff811115612a2f57600080fd5b612a3b87828801612668565b95989497509550505050565b600060208284031215612a5957600080fd5b8151611f5581612643565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612aa557612aa5612a64565b500390565b600060208284031215612abc57600080fd5b81518015158114611f5557600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612b0b6080830184612904565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612b446060830185612904565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612b8f6060830184612904565b95945050505050565b8281526040602082015260006123ea6040830184612904565b60008219821115612bc457612bc4612a64565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c1860c0830184612904565b98975050505050505050565b60008251612c368184602087016128d8565b919091019291505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositERC20\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositERC20To\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeERC20Withdrawal\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeETHWithdrawal\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_messenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l2TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20DepositInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20WithdrawalFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHDepositInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHWithdrawalFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", } // L1StandardBridgeABI is the input ABI used to generate the binding from. @@ -294,6 +294,51 @@ func (_L1StandardBridge *L1StandardBridgeCallerSession) Deposits(arg0 common.Add return _L1StandardBridge.Contract.Deposits(&_L1StandardBridge.CallOpts, arg0, arg1) } +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L1StandardBridge *L1StandardBridgeCaller) GasPayingToken(opts *bind.CallOpts) (struct { + Addr common.Address + Decimals uint8 +}, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "gasPayingToken") + + outstruct := new(struct { + Addr common.Address + Decimals uint8 + }) + if err != nil { + return *outstruct, err + } + + outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) + + return *outstruct, err + +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L1StandardBridge *L1StandardBridgeSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _L1StandardBridge.Contract.GasPayingToken(&_L1StandardBridge.CallOpts) +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L1StandardBridge *L1StandardBridgeCallerSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _L1StandardBridge.Contract.GasPayingToken(&_L1StandardBridge.CallOpts) +} + // L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. // // Solidity: function l2TokenBridge() view returns(address) @@ -449,6 +494,37 @@ func (_L1StandardBridge *L1StandardBridgeCallerSession) SuperchainConfig() (comm return _L1StandardBridge.Contract.SuperchainConfig(&_L1StandardBridge.CallOpts) } +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCaller) SystemConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "systemConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_L1StandardBridge *L1StandardBridgeSession) SystemConfig() (common.Address, error) { + return _L1StandardBridge.Contract.SystemConfig(&_L1StandardBridge.CallOpts) +} + +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_L1StandardBridge *L1StandardBridgeCallerSession) SystemConfig() (common.Address, error) { + return _L1StandardBridge.Contract.SystemConfig(&_L1StandardBridge.CallOpts) +} + // Version is a free data retrieval call binding the contract method 0x54fd4d50. // // Solidity: function version() view returns(string) @@ -732,25 +808,46 @@ func (_L1StandardBridge *L1StandardBridgeTransactorSession) FinalizeETHWithdrawa return _L1StandardBridge.Contract.FinalizeETHWithdrawal(&_L1StandardBridge.TransactOpts, _from, _to, _amount, _extraData) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _messenger, address _superchainConfig, address _systemConfig) returns() +func (_L1StandardBridge *L1StandardBridgeTransactor) Initialize(opts *bind.TransactOpts, _messenger common.Address, _superchainConfig common.Address, _systemConfig common.Address) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "initialize", _messenger, _superchainConfig, _systemConfig) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _messenger, address _superchainConfig, address _systemConfig) returns() +func (_L1StandardBridge *L1StandardBridgeSession) Initialize(_messenger common.Address, _superchainConfig common.Address, _systemConfig common.Address) (*types.Transaction, error) { + return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger, _superchainConfig, _systemConfig) +} + +// Initialize is a paid mutator transaction binding the contract method 0xc0c53b8b. +// +// Solidity: function initialize(address _messenger, address _superchainConfig, address _systemConfig) returns() +func (_L1StandardBridge *L1StandardBridgeTransactorSession) Initialize(_messenger common.Address, _superchainConfig common.Address, _systemConfig common.Address) (*types.Transaction, error) { + return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger, _superchainConfig, _systemConfig) +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. // -// Solidity: function initialize(address _messenger, address _superchainConfig) returns() -func (_L1StandardBridge *L1StandardBridgeTransactor) Initialize(opts *bind.TransactOpts, _messenger common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "initialize", _messenger, _superchainConfig) +// Solidity: function isCustomGasToken() returns(bool) +func (_L1StandardBridge *L1StandardBridgeTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1StandardBridge.contract.Transact(opts, "isCustomGasToken") } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. // -// Solidity: function initialize(address _messenger, address _superchainConfig) returns() -func (_L1StandardBridge *L1StandardBridgeSession) Initialize(_messenger common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger, _superchainConfig) +// Solidity: function isCustomGasToken() returns(bool) +func (_L1StandardBridge *L1StandardBridgeSession) IsCustomGasToken() (*types.Transaction, error) { + return _L1StandardBridge.Contract.IsCustomGasToken(&_L1StandardBridge.TransactOpts) } -// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. // -// Solidity: function initialize(address _messenger, address _superchainConfig) returns() -func (_L1StandardBridge *L1StandardBridgeTransactorSession) Initialize(_messenger common.Address, _superchainConfig common.Address) (*types.Transaction, error) { - return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger, _superchainConfig) +// Solidity: function isCustomGasToken() returns(bool) +func (_L1StandardBridge *L1StandardBridgeTransactorSession) IsCustomGasToken() (*types.Transaction, error) { + return _L1StandardBridge.Contract.IsCustomGasToken(&_L1StandardBridge.TransactOpts) } // Receive is a paid mutator transaction binding the contract receive function. diff --git a/op-bindings/bindings/l2crossdomainmessenger.go b/op-bindings/bindings/l2crossdomainmessenger.go index ff7241f5e27..16ea4e6bc6e 100644 --- a/op-bindings/bindings/l2crossdomainmessenger.go +++ b/op-bindings/bindings/l2crossdomainmessenger.go @@ -30,8 +30,8 @@ var ( // L2CrossDomainMessengerMetaData contains all meta data concerning the L2CrossDomainMessenger contract. var L2CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000239565b600054600160a81b900460ff16158080156200004d57506000546001600160a01b90910460ff16105b806200008457506200006a306200017360201b620013071760201c565b158015620000845750600054600160a01b900460ff166001145b620000ed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011b576000805460ff60a81b1916600160a81b1790555b620001268262000182565b80156200016f576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e4565b60cc546001600160a01b0316620002175760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611c8280620002496000396000f3fe60806040526004361061016a5760003560e01c806383a74074116100cb578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b146103c7578063db505d80146103da578063ecc704281461040757600080fd5b8063b1b1b20914610357578063b28ade2514610387578063c4d66de8146103a757600080fd5b80639fce812c116100b05780639fce812c146102fc578063a4e7f8bd14610327578063a7119869146102fc57600080fd5b806383a74074146102e55780638cbeeef21461020957600080fd5b80634c1d6a69116101225780635644cfdf116101075780635644cfdf146102755780635c975abb1461028b5780636e296e45146102ab57600080fd5b80634c1d6a691461020957806354fd4d501461021f57600080fd5b80632828d7e8116101535780632828d7e8146101b75780633dbb202b146101cc5780633f827a5a146101e157600080fd5b8063028f85f71461016f5780630c568498146101a2575b600080fd5b34801561017b57600080fd5b50610184601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101ae57600080fd5b50610184603f81565b3480156101c357600080fd5b50610184604081565b6101df6101da36600461177b565b61046c565b005b3480156101ed57600080fd5b506101f6600181565b60405161ffff9091168152602001610199565b34801561021557600080fd5b50610184619c4081565b34801561022b57600080fd5b506102686040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b604051610199919061184d565b34801561028157600080fd5b5061018461138881565b34801561029757600080fd5b5060005b6040519015158152602001610199565b3480156102b757600080fd5b506102c06106c9565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610199565b3480156102f157600080fd5b5061018462030d4081565b34801561030857600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166102c0565b34801561033357600080fd5b5061029b610342366004611867565b60ce6020526000908152604090205460ff1681565b34801561036357600080fd5b5061029b610372366004611867565b60cb6020526000908152604090205460ff1681565b34801561039357600080fd5b506101846103a2366004611880565b6107b5565b3480156103b357600080fd5b506101df6103c23660046118d4565b610823565b6101df6103d53660046118f1565b610a22565b3480156103e657600080fd5b5060cf546102c09073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041357600080fd5b5061045e60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610199565b60cf5461059e9073ffffffffffffffffffffffffffffffffffffffff166104948585856107b5565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061050060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161051c97969594939291906119c0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611323565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561062360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610635959493929190611a1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084015b60405180910390fd5b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6107d1604063ffffffff8816611a9c565b6107db9190611acc565b6107e6601088611a9c565b6107f39062030d40611b1a565b6107fd9190611b1a565b6108079190611b1a565b6108119190611b1a565b61081b9190611b1a565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff161580801561086e575060005460017401000000000000000000000000000000000000000090910460ff16105b806108a05750303b1580156108a0575060005474010000000000000000000000000000000000000000900460ff166001145b61092c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161078f565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156109b257600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b6109bb826113b1565b8015610a1e57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a40161078f565b8061ffff16600003610bd2576000610b2e878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506114ed915050565b600081815260cb602052604090205490915060ff1615610bd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c61796564000000000000000000606482015260840161078f565b505b6000610c18898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150c92505050565b9050610c6160cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610c9957853414610c7557610c75611b46565b600081815260ce602052604090205460ff1615610c9457610c94611b46565b610deb565b3415610d4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a40161078f565b600081815260ce602052604090205460ff16610deb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c6179656400000000000000000000000000000000606482015260840161078f565b610df48761152f565b15610ea7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a40161078f565b600081815260cb602052604090205460ff1615610f46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c6179656400000000000000000000606482015260840161078f565b610f6785610f58611388619c40611b1a565b67ffffffffffffffff16611584565b1580610f8d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156110a657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161109f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161078f565b50506112fe565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061113788619c405a6110fa9190611b75565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115a292505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156111ed57600082815260cb602052604090205460ff161561118a5761118a611b46565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26112fa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016112fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d65737361676500000000000000000000000000000000000000606482015260840161078f565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac90849061137990889088908790600401611b8c565b6000604051808303818588803b15801561139257600080fd5b505af11580156113a6573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff1661145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161078f565b60cc5473ffffffffffffffffffffffffffffffffffffffff166114a65760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006114fb858585856115bc565b805190602001209050949350505050565b600061151c878787878787611655565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff821630148061157e575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016115d59493929190611bd4565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161167296959493929190611c1e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461171657600080fd5b50565b60008083601f84011261172b57600080fd5b50813567ffffffffffffffff81111561174357600080fd5b60208301915083602082850101111561175b57600080fd5b9250929050565b803563ffffffff8116811461177657600080fd5b919050565b6000806000806060858703121561179157600080fd5b843561179c816116f4565b9350602085013567ffffffffffffffff8111156117b857600080fd5b6117c487828801611719565b90945092506117d7905060408601611762565b905092959194509250565b6000815180845260005b81811015611808576020818501810151868301820152016117ec565b8181111561181a576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061186060208301846117e2565b9392505050565b60006020828403121561187957600080fd5b5035919050565b60008060006040848603121561189557600080fd5b833567ffffffffffffffff8111156118ac57600080fd5b6118b886828701611719565b90945092506118cb905060208501611762565b90509250925092565b6000602082840312156118e657600080fd5b8135611860816116f4565b600080600080600080600060c0888a03121561190c57600080fd5b87359650602088013561191e816116f4565b9550604088013561192e816116f4565b9450606088013593506080880135925060a088013567ffffffffffffffff81111561195857600080fd5b6119648a828b01611719565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611a1260c083018486611977565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611a4f608083018688611977565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611ac357611ac3611a6d565b02949350505050565b600067ffffffffffffffff80841680611b0e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611b3d57611b3d611a6d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611b8757611b87611a6d565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611bcb60608301846117e2565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611c0d60808301856117e2565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611c6960c08301846117e2565b9897505050505050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000239565b600054600160a81b900460ff16158080156200004d57506000546001600160a01b90910460ff16105b806200008457506200006a306200017360201b620014e11760201c565b158015620000845750600054600160a01b900460ff166001145b620000ed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011b576000805460ff60a81b1916600160a81b1790555b620001268262000182565b80156200016f576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e4565b60cc546001600160a01b0316620002175760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611e9c80620002496000396000f3fe6080604052600436106101805760003560e01c80636e296e45116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b14610439578063db505d801461044c578063ecc704281461047957600080fd5b8063b1b1b209146103c9578063b28ade25146103f9578063c4d66de81461041957600080fd5b80639fce812c116100b05780639fce812c1461036e578063a4e7f8bd14610399578063a71198691461036e57600080fd5b80636e296e451461031d57806383a74074146103575780638cbeeef21461028757600080fd5b80633f827a5a1161013857806354fd4d501161011257806354fd4d501461029d5780635644cfdf146102f35780635c975abb1461030957600080fd5b80633f827a5a1461021c5780634397dfef146102445780634c1d6a691461028757600080fd5b8063213268491161016957806321326849146101cd5780632828d7e8146101f25780633dbb202b1461020757600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b506101e26104de565b60405190151581526020016101af565b3480156101fe57600080fd5b5061019a604081565b61021a610215366004611955565b61051d565b005b34801561022857600080fd5b50610231600181565b60405161ffff90911681526020016101af565b34801561025057600080fd5b5061025961081a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101af565b34801561029357600080fd5b5061019a619c4081565b3480156102a957600080fd5b506102e66040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516101af9190611a27565b3480156102ff57600080fd5b5061019a61138881565b34801561031557600080fd5b5060006101e2565b34801561032957600080fd5b506103326108a8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561036357600080fd5b5061019a62030d4081565b34801561037a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610332565b3480156103a557600080fd5b506101e26103b4366004611a41565b60ce6020526000908152604090205460ff1681565b3480156103d557600080fd5b506101e26103e4366004611a41565b60cb6020526000908152604090205460ff1681565b34801561040557600080fd5b5061019a610414366004611a5a565b61098f565b34801561042557600080fd5b5061021a610434366004611aae565b6109fd565b61021a610447366004611acb565b610bfc565b34801561045857600080fd5b5060cf546103329073ffffffffffffffffffffffffffffffffffffffff1681565b34801561048557600080fd5b506104d060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b6000806104e961081a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105256104de565b156105bd5734156105bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546106ef9073ffffffffffffffffffffffffffffffffffffffff166105e585858561098f565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061065160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161066d9796959493929190611b9a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114fd565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561077460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610786959493929190611bf9565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa15801561087b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089f9190611c47565b90939092509050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105b4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109ab604063ffffffff8816611cb6565b6109b59190611ce6565b6109c0601088611cb6565b6109cd9062030d40611d34565b6109d79190611d34565b6109e19190611d34565b6109eb9190611d34565b6109f59190611d34565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a48575060005460017401000000000000000000000000000000000000000090910460ff16105b80610a7a5750303b158015610a7a575060005474010000000000000000000000000000000000000000900460ff166001145b610b06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105b4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610b8c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610b958261158b565b8015610bf857600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610cb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105b4565b8061ffff16600003610dac576000610d08878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610daa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105b4565b505b6000610df2898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e3b60cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610e7357853414610e4f57610e4f611d60565b600081815260ce602052604090205460ff1615610e6e57610e6e611d60565b610fc5565b3415610f27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105b4565b600081815260ce602052604090205460ff16610fc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105b4565b610fce87611709565b15611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105b4565b600081815260cb602052604090205460ff1615611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105b4565b61114185611132611388619c40611d34565b67ffffffffffffffff1661175e565b1580611167575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561128057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105b4565b50506114d8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061131188619c405a6112d49190611d8f565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061177c92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113c757600082815260cb602052604090205460ff161561136457611364611d60565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114d4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105b4565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac90849061155390889088908790600401611da6565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105b4565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611796565b805190602001209050949350505050565b60006116f687878787878761182f565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611758575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016117af9493929190611dee565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161184c96959493929190611e38565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f057600080fd5b50565b60008083601f84011261190557600080fd5b50813567ffffffffffffffff81111561191d57600080fd5b60208301915083602082850101111561193557600080fd5b9250929050565b803563ffffffff8116811461195057600080fd5b919050565b6000806000806060858703121561196b57600080fd5b8435611976816118ce565b9350602085013567ffffffffffffffff81111561199257600080fd5b61199e878288016118f3565b90945092506119b190506040860161193c565b905092959194509250565b6000815180845260005b818110156119e2576020818501810151868301820152016119c6565b818111156119f4576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a3a60208301846119bc565b9392505050565b600060208284031215611a5357600080fd5b5035919050565b600080600060408486031215611a6f57600080fd5b833567ffffffffffffffff811115611a8657600080fd5b611a92868287016118f3565b9094509250611aa590506020850161193c565b90509250925092565b600060208284031215611ac057600080fd5b8135611a3a816118ce565b600080600080600080600060c0888a031215611ae657600080fd5b873596506020880135611af8816118ce565b95506040880135611b08816118ce565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611b3257600080fd5b611b3e8a828b016118f3565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611bec60c083018486611b51565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611c29608083018688611b51565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611c5a57600080fd5b8251611c65816118ce565b602084015190925060ff81168114611c7c57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611cdd57611cdd611c87565b02949350505050565b600067ffffffffffffffff80841680611d28577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611d5757611d57611c87565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611da157611da1611c87565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611de560608301846119bc565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611e2760808301856119bc565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611e8360c08301846119bc565b9897505050505050505056fea164736f6c634300080f000a", } // L2CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -542,6 +542,51 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) FailedMessag return _L2CrossDomainMessenger.Contract.FailedMessages(&_L2CrossDomainMessenger.CallOpts, arg0) } +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) GasPayingToken(opts *bind.CallOpts) (struct { + Addr common.Address + Decimals uint8 +}, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "gasPayingToken") + + outstruct := new(struct { + Addr common.Address + Decimals uint8 + }) + if err != nil { + return *outstruct, err + } + + outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) + + return *outstruct, err + +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _L2CrossDomainMessenger.Contract.GasPayingToken(&_L2CrossDomainMessenger.CallOpts) +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _L2CrossDomainMessenger.Contract.GasPayingToken(&_L2CrossDomainMessenger.CallOpts) +} + // L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // // Solidity: function l1CrossDomainMessenger() view returns(address) @@ -780,6 +825,27 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorSession) Initiali return _L2CrossDomainMessenger.Contract.Initialize(&_L2CrossDomainMessenger.TransactOpts, _l1CrossDomainMessenger) } +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2CrossDomainMessenger.contract.Transact(opts, "isCustomGasToken") +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) IsCustomGasToken() (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.IsCustomGasToken(&_L2CrossDomainMessenger.TransactOpts) +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorSession) IsCustomGasToken() (*types.Transaction, error) { + return _L2CrossDomainMessenger.Contract.IsCustomGasToken(&_L2CrossDomainMessenger.TransactOpts) +} + // RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. // // Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() diff --git a/op-bindings/bindings/l2standardbridge.go b/op-bindings/bindings/l2standardbridge.go index 8a935e961a7..ad1c0618c32 100644 --- a/op-bindings/bindings/l2standardbridge.go +++ b/op-bindings/bindings/l2standardbridge.go @@ -30,8 +30,8 @@ var ( // L2StandardBridgeMetaData contains all meta data concerning the L2StandardBridge contract. var L2StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeDeposit\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_otherBridge\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdrawTo\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"DepositFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b620004811760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612a8380620002276000396000f3fe60806040526004361061012d5760003560e01c8063662a633a116100a5578063927ede2d11610074578063c4d66de811610059578063c4d66de814610421578063c89701a214610441578063e11013dd1461046e57600080fd5b8063927ede2d146103e3578063a3a795481461040e57600080fd5b8063662a633a1461036a5780637f46ddb21461025a578063870876231461037d5780638f601f661461039d57600080fd5b806336c717c1116100fc578063540abf73116100e1578063540abf73146102d857806354fd4d50146102f85780635c975abb1461034e57600080fd5b806336c717c11461025a5780633cb747bf146102ab57600080fd5b80630166a07a1461020157806309fc8843146102215780631635f5fd1461023457806332b7006d1461024757600080fd5b366101fc57333b156101c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b6101fa73deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d406040518060200160405280600081525061049d565b005b600080fd5b34801561020d57600080fd5b506101fa61021c366004612476565b610578565b6101fa61022f366004612527565b61091a565b6101fa61024236600461257a565b6109f1565b6101fa6102553660046125ed565b610e43565b34801561026657600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b757600080fd5b506003546102819073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102e457600080fd5b506101fa6102f3366004612641565b610f1d565b34801561030457600080fd5b506103416040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a2919061272e565b34801561035a57600080fd5b50604051600081526020016102a2565b6101fa610378366004612476565b610f62565b34801561038957600080fd5b506101fa610398366004612741565b610fd5565b3480156103a957600080fd5b506103d56103b83660046127c4565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102a2565b3480156103ef57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610281565b6101fa61041c366004612741565b6110a9565b34801561042d57600080fd5b506101fa61043c3660046127fd565b6110ed565b34801561044d57600080fd5b506004546102819073ffffffffffffffffffffffffffffffffffffffff1681565b6101fa61047c36600461281a565b611296565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016104ec576104e785858585856112df565b610570565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d919061287d565b905061056e878288888888886114a9565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561064b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561060f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610633919061287d565b73ffffffffffffffffffffffffffffffffffffffff16145b6106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101bd565b610706876117d4565b15610854576107158787611836565b6107c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101bd565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050506108d6565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546108929084906128c9565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556108d6908585611956565b61056e878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a2a92505050565b333b156109a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b6109ec3333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112df92505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610ac4575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac919061287d565b73ffffffffffffffffffffffffffffffffffffffff16145b610b76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101bd565b823414610c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101bd565b3073ffffffffffffffffffffffffffffffffffffffff851603610caa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101bd565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101bd565b610d9785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ab892505050565b6000610db4855a8660405180602001604052806000815250611b59565b905080610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101bd565b333b15610ed2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b610f16853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049d92505050565b5050505050565b61056e87873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114a992505050565b73ffffffffffffffffffffffffffffffffffffffff8716158015610faf575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b15610fc657610fc185858585856109f1565b61056e565b61056e86888787878787610578565b333b15611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b61057086863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114a992505050565b610570863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049d92505050565b600054610100900460ff161580801561110d5750600054600160ff909116105b806111275750303b158015611127575060005460ff166001145b6111b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101bd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561121157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61122f73420000000000000000000000000000000000000783611b73565b801561129257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6112d93385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506112df92505050565b50505050565b82341461136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101bd565b61137a85858584611c5d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906113dd908b908b9086908a906024016128e0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261147092918890600401612929565b6000604051808303818588803b15801561148957600080fd5b505af115801561149d573d6000803e3d6000fd5b50505050505050505050565b6114b2876117d4565b15611600576114c18787611836565b611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101bd565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b1580156115e357600080fd5b505af11580156115f7573d6000803e3d6000fd5b50505050611694565b61162273ffffffffffffffffffffffffffffffffffffffff8816863086611cfe565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461166090849061296e565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6116a2878787878786611d5c565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611706908b908d908c908c908c908b90602401612986565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261179992918790600401612929565b600060405180830381600087803b1580156117b357600080fd5b505af11580156117c7573d6000803e3d6000fd5b5050505050505050505050565b6000611800827f1d1d8b6300000000000000000000000000000000000000000000000000000000611dea565b806118305750611830827fec4fc8e300000000000000000000000000000000000000000000000000000000611dea565b92915050565b6000611862837f1d1d8b6300000000000000000000000000000000000000000000000000000000611dea565b1561190b578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d6919061287d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611830565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b2573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109ec9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611e0d565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611aa2939291906129e1565b60405180910390a4610570868686868686611f19565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611b45939291906129e1565b60405180910390a46112d984848484611fa1565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101bd565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611cea939291906129e1565b60405180910390a46112d98484848461200e565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526112d99085907f23b872dd00000000000000000000000000000000000000000000000000000000906084016119a8565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611dd4939291906129e1565b60405180910390a461057086868686868661206d565b6000611df5836120e5565b8015611e065750611e068383612149565b9392505050565b6000611e6f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166122189092919063ffffffff16565b8051909150156109ec5780806020019051810190611e8d9190612a1f565b6109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101bd565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051611f91939291906129e1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612000929190612a41565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612000929190612a41565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051611f91939291906129e1565b6000612111827f01ffc9a700000000000000000000000000000000000000000000000000000000612149565b80156118305750612142827fffffffff00000000000000000000000000000000000000000000000000000000612149565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612201575060208210155b801561220d5750600081115b979650505050505050565b6060612227848460008561222f565b949350505050565b6060824710156122c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101bd565b73ffffffffffffffffffffffffffffffffffffffff85163b61233f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101bd565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516123689190612a5a565b60006040518083038185875af1925050503d80600081146123a5576040519150601f19603f3d011682016040523d82523d6000602084013e6123aa565b606091505b509150915061220d828286606083156123c4575081611e06565b8251156123d45782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101bd919061272e565b73ffffffffffffffffffffffffffffffffffffffff8116811461242a57600080fd5b50565b60008083601f84011261243f57600080fd5b50813567ffffffffffffffff81111561245757600080fd5b60208301915083602082850101111561246f57600080fd5b9250929050565b600080600080600080600060c0888a03121561249157600080fd5b873561249c81612408565b965060208801356124ac81612408565b955060408801356124bc81612408565b945060608801356124cc81612408565b93506080880135925060a088013567ffffffffffffffff8111156124ef57600080fd5b6124fb8a828b0161242d565b989b979a50959850939692959293505050565b803563ffffffff8116811461252257600080fd5b919050565b60008060006040848603121561253c57600080fd5b6125458461250e565b9250602084013567ffffffffffffffff81111561256157600080fd5b61256d8682870161242d565b9497909650939450505050565b60008060008060006080868803121561259257600080fd5b853561259d81612408565b945060208601356125ad81612408565b935060408601359250606086013567ffffffffffffffff8111156125d057600080fd5b6125dc8882890161242d565b969995985093965092949392505050565b60008060008060006080868803121561260557600080fd5b853561261081612408565b9450602086013593506126256040870161250e565b9250606086013567ffffffffffffffff8111156125d057600080fd5b600080600080600080600060c0888a03121561265c57600080fd5b873561266781612408565b9650602088013561267781612408565b9550604088013561268781612408565b94506060880135935061269c6080890161250e565b925060a088013567ffffffffffffffff8111156124ef57600080fd5b60005b838110156126d35781810151838201526020016126bb565b838111156112d95750506000910152565b600081518084526126fc8160208601602086016126b8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611e0660208301846126e4565b60008060008060008060a0878903121561275a57600080fd5b863561276581612408565b9550602087013561277581612408565b94506040870135935061278a6060880161250e565b9250608087013567ffffffffffffffff8111156127a657600080fd5b6127b289828a0161242d565b979a9699509497509295939492505050565b600080604083850312156127d757600080fd5b82356127e281612408565b915060208301356127f281612408565b809150509250929050565b60006020828403121561280f57600080fd5b8135611e0681612408565b6000806000806060858703121561283057600080fd5b843561283b81612408565b93506128496020860161250e565b9250604085013567ffffffffffffffff81111561286557600080fd5b6128718782880161242d565b95989497509550505050565b60006020828403121561288f57600080fd5b8151611e0681612408565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156128db576128db61289a565b500390565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152508360408301526080606083015261291f60808301846126e4565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815260606020820152600061295860608301856126e4565b905063ffffffff83166040830152949350505050565b600082198211156129815761298161289a565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526129d560c08301846126e4565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612a1660608301846126e4565b95945050505050565b600060208284031215612a3157600080fd5b81518015158114611e0657600080fd5b82815260406020820152600061222760408301846126e4565b60008251612a6c8184602087016126b8565b919091019291505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeDeposit\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_otherBridge\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdrawTo\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"DepositFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b620005171760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612d4580620002276000396000f3fe6080604052600436106101635760003560e01c80635c975abb116100c0578063927ede2d11610074578063c4d66de811610059578063c4d66de8146104b7578063c89701a2146104d7578063e11013dd1461050457600080fd5b8063927ede2d14610479578063a3a79548146104a457600080fd5b80637f46ddb2116100a55780637f46ddb2146102ba57806387087623146104135780638f601f661461043357600080fd5b80635c975abb146103ec578063662a633a1461040057600080fd5b806336c717c1116101175780634397dfef116100fc5780634397dfef14610333578063540abf731461037657806354fd4d501461039657600080fd5b806336c717c1146102ba5780633cb747bf1461030657600080fd5b80631635f5fd116101485780631635f5fd1461026a578063213268491461027d57806332b7006d146102a757600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b156101fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023073deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d4060405180602001604052806000815250610533565b005b600080fd5b34801561024357600080fd5b50610230610252366004612703565b61060e565b6102306102653660046127b4565b6109b0565b610230610278366004612807565b610a87565b34801561028957600080fd5b50610292610f6e565b60405190151581526020015b60405180910390f35b6102306102b536600461287a565b610fad565b3480156102c657600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029e565b34801561031257600080fd5b506003546102e19073ffffffffffffffffffffffffffffffffffffffff1681565b34801561033f57600080fd5b50610348611087565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff90911660208301520161029e565b34801561038257600080fd5b506102306103913660046128ce565b611115565b3480156103a257600080fd5b506103df6040518060400160405280600581526020017f312e392e3000000000000000000000000000000000000000000000000000000081525081565b60405161029e91906129bb565b3480156103f857600080fd5b506000610292565b61023061040e366004612703565b61115a565b34801561041f57600080fd5b5061023061042e3660046129ce565b6111cd565b34801561043f57600080fd5b5061046b61044e366004612a51565b600260209081526000928352604080842090915290825290205481565b60405190815260200161029e565b34801561048557600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102e1565b6102306104b23660046129ce565b6112a1565b3480156104c357600080fd5b506102306104d2366004612a8a565b6112e5565b3480156104e357600080fd5b506004546102e19073ffffffffffffffffffffffffffffffffffffffff1681565b610230610512366004612aa7565b61148e565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016105825761057d85858585856114d7565b610606565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f39190612b0a565b905061060487828888888888611736565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106e1575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c99190612b0a565b73ffffffffffffffffffffffffffffffffffffffff16145b610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101f3565b61079c87611a61565b156108ea576107ab8787611ac3565b61085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101f3565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108cd57600080fd5b505af11580156108e1573d6000803e3d6000fd5b5050505061096c565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610928908490612b56565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561096c908585611be3565b610604878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cb792505050565b333b15610a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b610a823333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114d792505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b5a575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b429190612b0a565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101f3565b610c14610f6e565b15610ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e00000000000000000060648201526084016101f3565b823414610d30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101f3565b3073ffffffffffffffffffffffffffffffffffffffff851603610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101f3565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101f3565b610ec285858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d4592505050565b6000610edf855a8660405180602001604052806000815250611de6565b905080610606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101f3565b600080610f79611087565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b333b1561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b611080853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061053392505050565b5050505050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa1580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612b6d565b90939092509050565b61060487873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061173692505050565b73ffffffffffffffffffffffffffffffffffffffff87161580156111a7575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b156111be576111b98585858585610a87565b610604565b6106048688878787878761060e565b333b1561125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b61060686863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061173692505050565b610606863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061053392505050565b600054610100900460ff16158080156113055750600054600160ff909116105b8061131f5750303b15801561131f575060005460ff166001145b6113ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101f3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61142773420000000000000000000000000000000000000783611e00565b801561148a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6114d13385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114d792505050565b50505050565b6114df610f6e565b1561156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e00000000000000000060648201526084016101f3565b8234146115fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101f3565b61160785858584611eea565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd000000000000000000000000000000000000000000000000000000009061166a908b908b9086908a90602401612ba2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116fd92918890600401612beb565b6000604051808303818588803b15801561171657600080fd5b505af115801561172a573d6000803e3d6000fd5b50505050505050505050565b61173f87611a61565b1561188d5761174e8787611ac3565b611800576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101f3565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b50505050611921565b6118af73ffffffffffffffffffffffffffffffffffffffff8816863086611f8b565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546118ed908490612c30565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b61192f878787878786611fe9565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611993908b908d908c908c908c908b90602401612c48565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611a2692918790600401612beb565b600060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b5050505050505050505050565b6000611a8d827f1d1d8b6300000000000000000000000000000000000000000000000000000000612077565b80611abd5750611abd827fec4fc8e300000000000000000000000000000000000000000000000000000000612077565b92915050565b6000611aef837f1d1d8b6300000000000000000000000000000000000000000000000000000000612077565b15611b98578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b639190612b0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611abd565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a829084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261209a565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611d2f93929190612ca3565b60405180910390a46106068686868686866121a6565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611dd293929190612ca3565b60405180910390a46114d18484848461222e565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101f3565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611f7793929190612ca3565b60405180910390a46114d18484848461229b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526114d19085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611c35565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e86868660405161206193929190612ca3565b60405180910390a46106068686868686866122fa565b600061208283612372565b8015612093575061209383836123d6565b9392505050565b60006120fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124a59092919063ffffffff16565b805190915015610a82578080602001905181019061211a9190612ce1565b610a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101f3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161221e93929190612ca3565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161228d929190612d03565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161228d929190612d03565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161221e93929190612ca3565b600061239e827f01ffc9a7000000000000000000000000000000000000000000000000000000006123d6565b8015611abd57506123cf827fffffffff000000000000000000000000000000000000000000000000000000006123d6565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561248e575060208210155b801561249a5750600081115b979650505050505050565b60606124b484846000856124bc565b949350505050565b60608247101561254e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101f3565b73ffffffffffffffffffffffffffffffffffffffff85163b6125cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101f3565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125f59190612d1c565b60006040518083038185875af1925050503d8060008114612632576040519150601f19603f3d011682016040523d82523d6000602084013e612637565b606091505b509150915061249a82828660608315612651575081612093565b8251156126615782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f391906129bb565b73ffffffffffffffffffffffffffffffffffffffff811681146126b757600080fd5b50565b60008083601f8401126126cc57600080fd5b50813567ffffffffffffffff8111156126e457600080fd5b6020830191508360208285010111156126fc57600080fd5b9250929050565b600080600080600080600060c0888a03121561271e57600080fd5b873561272981612695565b9650602088013561273981612695565b9550604088013561274981612695565b9450606088013561275981612695565b93506080880135925060a088013567ffffffffffffffff81111561277c57600080fd5b6127888a828b016126ba565b989b979a50959850939692959293505050565b803563ffffffff811681146127af57600080fd5b919050565b6000806000604084860312156127c957600080fd5b6127d28461279b565b9250602084013567ffffffffffffffff8111156127ee57600080fd5b6127fa868287016126ba565b9497909650939450505050565b60008060008060006080868803121561281f57600080fd5b853561282a81612695565b9450602086013561283a81612695565b935060408601359250606086013567ffffffffffffffff81111561285d57600080fd5b612869888289016126ba565b969995985093965092949392505050565b60008060008060006080868803121561289257600080fd5b853561289d81612695565b9450602086013593506128b26040870161279b565b9250606086013567ffffffffffffffff81111561285d57600080fd5b600080600080600080600060c0888a0312156128e957600080fd5b87356128f481612695565b9650602088013561290481612695565b9550604088013561291481612695565b9450606088013593506129296080890161279b565b925060a088013567ffffffffffffffff81111561277c57600080fd5b60005b83811015612960578181015183820152602001612948565b838111156114d15750506000910152565b60008151808452612989816020860160208601612945565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120936020830184612971565b60008060008060008060a087890312156129e757600080fd5b86356129f281612695565b95506020870135612a0281612695565b945060408701359350612a176060880161279b565b9250608087013567ffffffffffffffff811115612a3357600080fd5b612a3f89828a016126ba565b979a9699509497509295939492505050565b60008060408385031215612a6457600080fd5b8235612a6f81612695565b91506020830135612a7f81612695565b809150509250929050565b600060208284031215612a9c57600080fd5b813561209381612695565b60008060008060608587031215612abd57600080fd5b8435612ac881612695565b9350612ad66020860161279b565b9250604085013567ffffffffffffffff811115612af257600080fd5b612afe878288016126ba565b95989497509550505050565b600060208284031215612b1c57600080fd5b815161209381612695565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612b6857612b68612b27565b500390565b60008060408385031215612b8057600080fd5b8251612b8b81612695565b602084015190925060ff81168114612a7f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612be16080830184612971565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612c1a6060830185612971565b905063ffffffff83166040830152949350505050565b60008219821115612c4357612c43612b27565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c9760c0830184612971565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612cd86060830184612971565b95945050505050565b600060208284031215612cf357600080fd5b8151801515811461209357600080fd5b8281526040602082015260006124b46040830184612971565b60008251612d2e818460208701612945565b919091019291505056fea164736f6c634300080f000a", } // L2StandardBridgeABI is the input ABI used to generate the binding from. @@ -294,6 +294,51 @@ func (_L2StandardBridge *L2StandardBridgeCallerSession) Deposits(arg0 common.Add return _L2StandardBridge.Contract.Deposits(&_L2StandardBridge.CallOpts, arg0, arg1) } +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L2StandardBridge *L2StandardBridgeCaller) GasPayingToken(opts *bind.CallOpts) (struct { + Addr common.Address + Decimals uint8 +}, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "gasPayingToken") + + outstruct := new(struct { + Addr common.Address + Decimals uint8 + }) + if err != nil { + return *outstruct, err + } + + outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) + + return *outstruct, err + +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L2StandardBridge *L2StandardBridgeSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _L2StandardBridge.Contract.GasPayingToken(&_L2StandardBridge.CallOpts) +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_L2StandardBridge *L2StandardBridgeCallerSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _L2StandardBridge.Contract.GasPayingToken(&_L2StandardBridge.CallOpts) +} + // L1TokenBridge is a free data retrieval call binding the contract method 0x36c717c1. // // Solidity: function l1TokenBridge() view returns(address) @@ -617,6 +662,27 @@ func (_L2StandardBridge *L2StandardBridgeTransactorSession) Initialize(_otherBri return _L2StandardBridge.Contract.Initialize(&_L2StandardBridge.TransactOpts, _otherBridge) } +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_L2StandardBridge *L2StandardBridgeTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L2StandardBridge.contract.Transact(opts, "isCustomGasToken") +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_L2StandardBridge *L2StandardBridgeSession) IsCustomGasToken() (*types.Transaction, error) { + return _L2StandardBridge.Contract.IsCustomGasToken(&_L2StandardBridge.TransactOpts) +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_L2StandardBridge *L2StandardBridgeTransactorSession) IsCustomGasToken() (*types.Transaction, error) { + return _L2StandardBridge.Contract.IsCustomGasToken(&_L2StandardBridge.TransactOpts) +} + // Withdraw is a paid mutator transaction binding the contract method 0x32b7006d. // // Solidity: function withdraw(address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() diff --git a/op-bindings/bindings/optimismportal.go b/op-bindings/bindings/optimismportal.go index 720b42a0385..9241a1cc1cf 100644 --- a/op-bindings/bindings/optimismportal.go +++ b/op-bindings/bindings/optimismportal.go @@ -48,8 +48,8 @@ type TypesWithdrawalTransaction struct { // OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract. var OptimismPortalMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l2Oracle\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isOutputFinalized\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"paused_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provenWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2OutputIndex\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LargeCalldata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SmallGasLimit\",\"inputs\":[]}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200191f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615142806200029f6000396000f3fe6080604052600436106101125760003560e01c80638c3152e9116100a5578063a35d99df11610074578063cff0ab9611610059578063cff0ab961461039a578063e965084c1461043b578063e9e05c42146104c757600080fd5b8063a35d99df14610341578063c0c53b8b1461037a57600080fd5b80638c3152e9146102975780639b5f694a146102b75780639bf62d82146102e4578063a14238e71461031157600080fd5b806354fd4d50116100e157806354fd4d50146101fc5780635c975abb146102525780636dbffb78146102775780638b4c40b01461013757600080fd5b806333d7e2bd1461013e57806335e80ab314610195578063452a9320146101c75780634870496f146101dc57600080fd5b36610139576101373334620186a06000604051806020016040528060008152506104d5565b005b600080fd5b34801561014a57600080fd5b5060375461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101a157600080fd5b5060355461016b90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b3480156101d357600080fd5b5061016b610692565b3480156101e857600080fd5b506101376101f7366004614709565b61072a565b34801561020857600080fd5b506102456040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161018c919061485b565b34801561025e57600080fd5b50610267610d2d565b604051901515815260200161018c565b34801561028357600080fd5b5061026761029236600461486e565b610dc0565b3480156102a357600080fd5b506101376102b2366004614887565b610e7d565b3480156102c357600080fd5b5060365461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f057600080fd5b5060325461016b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031d57600080fd5b5061026761032c36600461486e565b60336020526000908152604090205460ff1681565b34801561034d57600080fd5b5061036161035c3660046148e1565b6116b8565b60405167ffffffffffffffff909116815260200161018c565b34801561038657600080fd5b506101376103953660046148fc565b6116d1565b3480156103a657600080fd5b50600154610402906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161018c565b34801561044757600080fd5b5061049961045636600461486e565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff928316602085015291169082015260600161018c565b6101376104d5366004614955565b8260005a90508380156104fd575073ffffffffffffffffffffffffffffffffffffffff871615155b15610534576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61053e83516116b8565b67ffffffffffffffff168567ffffffffffffffff16101561058b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0835111156105c9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146105ea575033731111000000000000000000000000000000001111015b600034888888886040516020016106059594939291906149d2565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3284604051610675919061485b565b60405180910390a45050610689828261193b565b50505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614a37565b905090565b610732610d2d565b15610769576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff160361082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561089d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c19190614a74565b5190506108db6108d636869003860186614ad9565b611c12565b8114610969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610824565b600061097487611c6e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610a8a5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610a62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a869190614a74565b5114155b610b16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610824565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610bdf9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610bd5888a614b3f565b8a60400135611c9e565b610c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610824565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614bc3565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610e759173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5a9190614a74565b602001516fffffffffffffffffffffffffffffffff16611cc2565b92915050565b565b610e85610d2d565b15610ebc576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14610f65576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610824565b6000610f7082611c6e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361105b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610824565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ec9190614be0565b81602001516fffffffffffffffffffffffffffffffff1610156111b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610824565b6111d681602001516fffffffffffffffffffffffffffffffff16611cc2565b611288576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610824565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561130f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113339190614a74565b82518151919250146113ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610824565b61140c81602001516fffffffffffffffffffffffffffffffff16611cc2565b6114be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610824565b60008381526033602052604090205460ff161561155d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610824565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516115ff93929190611d68565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061166490841515815260200190565b60405180910390a28015801561167a5750326001145b156116b1576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050505050565b60006116c5826010614c28565b610e7590615208614c58565b600054610100900460ff16158080156116f15750600054600160ff909116105b8061170b5750303b15801561170b575060005460ff166001145b611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610824565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156117f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010085841602179055603254166118ae57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b6118b6611dc6565b801561191957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090611971907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614c84565b9050600061197d611ed9565b90506000816020015160ff16826000015163ffffffff1661199e9190614cca565b90508215611ad5576001546000906119d5908390700100000000000000000000000000000000900467ffffffffffffffff16614d32565b90506000836040015160ff16836119ec9190614da6565b600154611a0c9084906fffffffffffffffffffffffffffffffff16614da6565b611a169190614cca565b600154909150600090611a6790611a409084906fffffffffffffffffffffffffffffffff16614e62565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16611f9a565b90506001861115611a9657611a93611a4082876040015160ff1660018a611a8e9190614c84565b611fb9565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611b08908490700100000000000000000000000000000000900467ffffffffffffffff16614c58565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611b95576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090611bc1906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816614ed6565b90506000611bd348633b9aca0061200e565b611bdd9083614f13565b905060005a611bec9088614c84565b905080821115611c0857611c08611c038284614c84565b612025565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611c51949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611c51979096959101614f27565b600080611caa86612053565b9050611cb881868686612085565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190614be0565b611d609083614f7e565b421192915050565b6000806000611d788660006120b5565b905080611dae576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff16611e5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610824565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003610e7b5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015611f76573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107259190614fbb565b6000611faf611fa985856120d3565b836120e3565b90505b9392505050565b6000670de0b6b3a7640000611ffa611fd18583614cca565b611fe390670de0b6b3a7640000614d32565b611ff585670de0b6b3a7640000614da6565b6120f2565b6120049086614da6565b611faf9190614cca565b60008183101561201e5781611fb2565b5090919050565b6000805a90505b825a6120389083614c84565b101561204e576120478261505a565b915061202c565b505050565b6060818051906020012060405160200161206f91815260200190565b6040516020818303038152906040529050919050565b60006120ac84612096878686612123565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561201e5781611fb2565b600081831261201e5781611fb2565b6000611fb2670de0b6b3a76400008361210a86612ba1565b6121149190614da6565b61211e9190614cca565b612de5565b60606000845111612190576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610824565b600061219b84613024565b905060006121a886613110565b90506000846040516020016121bf91815260200190565b60405160208183030381529060405290506000805b8451811015612b185760008582815181106121f1576121f1615092565b60200260200101519050845183111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610824565b8260000361234557805180516020918201206040516122da926122b492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610824565b61249c565b8051516020116123fb578051805160209182012060405161236f926122b492910190815260200190565b612340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610824565b80518451602080870191909120825191909201201461249c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610824565b6124a860106001614f7e565b81602001515103612684578451830361261c576124e281602001516010815181106124d5576124d5615092565b6020026020010151613173565b96506000875111612575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610824565b600186516125839190614c84565b8214612611576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610824565b505050505050611fb2565b600085848151811061263057612630615092565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061265b5761265b615092565b6020026020010151905061266e816132d3565b955061267b600186614f7e565b94505050612b05565b600281602001515103612a7d57600061269c826132f8565b90506000816000815181106126b3576126b3615092565b016020015160f81c905060006126ca6002836150c1565b6126d59060026150e3565b905060006126e6848360ff1661331c565b905060006126f48a8961331c565b905060006127028383613352565b905080835114612794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610824565b60ff8516600214806127a9575060ff85166003145b15612998578082511461283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610824565b61285887602001516001815181106124d5576124d5615092565b9c5060008d51116128eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610824565b60018c516128f99190614c84565b8814612987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610824565b505050505050505050505050611fb2565b60ff851615806129ab575060ff85166001145b156129ea576129d787602001516001815181106129ca576129ca615092565b60200260200101516132d3565b99506129e3818a614f7e565b9850612a72565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610824565b505050505050612b05565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610824565b5080612b108161505a565b9150506121d4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610824565b6000808213612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b60006060612c1984613406565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c18213612e1657506000919050565b680755bf798b4a1bf1e58212612e88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610824565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561304257613042614529565b60405190808252806020026020018201604052801561308757816020015b60408051808201909152606080825260208201528152602001906001900390816130605790505b50915060005b818110156131095760405180604001604052808583815181106130b2576130b2615092565b602002602001015181526020016130e18684815181106130d4576130d4615092565b60200260200101516134dc565b8152508382815181106130f6576130f6615092565b602090810291909101015260010161308d565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613168578060011b82018184015160001a8060041c8253600f81166001830153505060010161313a565b509295945050505050565b60606000806000613183856134ef565b91945092509050600081600181111561319e5761319e615106565b1461322b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610824565b6132358284614f7e565b8551146132c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610824565b6120ac85602001518484613f5c565b606060208260000151106132ef576132ea82613173565b610e75565b610e7582613ff0565b6060610e7561331783602001516000815181106124d5576124d5615092565b613110565b60608251821061333b5750604080516020810190915260008152610e75565b611fb2838384865161334d9190614c84565b614006565b6000808251845110613365578251613368565b83515b90505b80821080156133ef575082828151811061338757613387615092565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106133c6576133c6615092565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156133ff5781600101915061336b565b5092915050565b6000808211613471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610824565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060610e756134ea836141de565b6142c7565b6000806000808460000151116135ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b6020840151805160001a607f81116135d2576000600160009450945094505050613f55565b60b781116137e05760006135e7608083614c84565b9050808760000151116136a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610824565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061371b57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6137cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610824565b5060019550935060009250613f55915050565b60bf8111613b2e5760006137f560b783614c84565b9050808760000151116138b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610824565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361398e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610824565b613a5c8184614f7e565b895111613b11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610824565b613b1c836001614f7e565b9750955060009450613f559350505050565b60f78111613c0f576000613b4360c083614c84565b905080876000015111613bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b600195509350849250613f55915050565b6000613c1c60f783614c84565b905080876000015111613cd7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610824565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613db5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610824565b600184015160088302610100031c60378111613e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610824565b613e838184614f7e565b895111613f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610824565b613f43836001614f7e565b9750955060019450613f559350505050565b9193909250565b60608167ffffffffffffffff811115613f7757613f77614529565b6040519080825280601f01601f191660200182016040528015613fa1576020820181803683370190505b5090508115611fb2576000613fb68486614f7e565b90506020820160005b84811015613fd7578281015182820152602001613fbf565b84811115613fe6576000858301525b5050509392505050565b6060610e75826020015160008460000151613f5c565b60608182601f011015614075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8282840110156140e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610824565b8183018451101561414e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610824565b60608215801561416d57604051915060008252602082016040526141d5565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141a657805183526020928301920161418e565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116142a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610824565b50604080518082019091528151815260209182019181019190915290565b606060008060006142d7856134ef565b9194509250905060018160018111156142f2576142f2615106565b1461437f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610824565b845161438b8385614f7e565b14614418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610824565b604080516020808252610420820190925290816020015b604080518082019091526000808252602082015281526020019060019003908161442f5790505093506000835b865181101561451d576000806144a26040518060400160405280858c600001516144869190614c84565b8152602001858c6020015161449b9190614f7e565b90526134ef565b5091509150604051806040016040528083836144be9190614f7e565b8152602001848b602001516144d39190614f7e565b8152508885815181106144e8576144e8615092565b60209081029190910101526144fe600185614f7e565b935061450a8183614f7e565b6145149084614f7e565b9250505061445c565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561459f5761459f614529565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146145c957600080fd5b50565b600082601f8301126145dd57600080fd5b813567ffffffffffffffff8111156145f7576145f7614529565b61462860207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614558565b81815284602083860101111561463d57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561466c57600080fd5b60405160c0810167ffffffffffffffff828210818311171561469057614690614529565b8160405282935084358352602085013591506146ab826145a7565b816020840152604085013591506146c1826145a7565b816040840152606085013560608401526080850135608084015260a08501359150808211156146ef57600080fd5b506146fc858286016145cc565b60a0830152505092915050565b600080600080600085870360e081121561472257600080fd5b863567ffffffffffffffff8082111561473a57600080fd5b6147468a838b0161465a565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561477f57600080fd5b60408901955060c089013592508083111561479957600080fd5b828901925089601f8401126147ad57600080fd5b82359150808211156147be57600080fd5b508860208260051b84010111156147d457600080fd5b959894975092955050506020019190565b60005b838110156148005781810151838201526020016147e8565b838111156119195750506000910152565b600081518084526148298160208601602086016147e5565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fb26020830184614811565b60006020828403121561488057600080fd5b5035919050565b60006020828403121561489957600080fd5b813567ffffffffffffffff8111156148b057600080fd5b6148bc8482850161465a565b949350505050565b803567ffffffffffffffff811681146148dc57600080fd5b919050565b6000602082840312156148f357600080fd5b611fb2826148c4565b60008060006060848603121561491157600080fd5b833561491c816145a7565b9250602084013561492c816145a7565b9150604084013561493c816145a7565b809150509250925092565b80151581146145c957600080fd5b600080600080600060a0868803121561496d57600080fd5b8535614978816145a7565b94506020860135935061498d604087016148c4565b9250606086013561499d81614947565b9150608086013567ffffffffffffffff8111156149b957600080fd5b6149c5888289016145cc565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614a268160498501602087016147e5565b919091016049019695505050505050565b600060208284031215614a4957600080fd5b8151611fb2816145a7565b80516fffffffffffffffffffffffffffffffff811681146148dc57600080fd5b600060608284031215614a8657600080fd5b6040516060810181811067ffffffffffffffff82111715614aa957614aa9614529565b60405282518152614abc60208401614a54565b6020820152614acd60408401614a54565b60408201529392505050565b600060808284031215614aeb57600080fd5b6040516080810181811067ffffffffffffffff82111715614b0e57614b0e614529565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b5a57614b5a614529565b8360051b6020614b6b818301614558565b868152918501918181019036841115614b8357600080fd5b865b84811015614bb757803586811115614b9d5760008081fd5b614ba936828b016145cc565b845250918301918301614b85565b50979650505050505050565b600060208284031215614bd557600080fd5b8151611fb281614947565b600060208284031215614bf257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615614c4f57614c4f614bf9565b02949350505050565b600067ffffffffffffffff808316818516808303821115614c7b57614c7b614bf9565b01949350505050565b600082821015614c9657614c96614bf9565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614cd957614cd9614c9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614d2d57614d2d614bf9565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614d6c57614d6c614bf9565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614da057614da0614bf9565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614de757614de7614bf9565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614e2257614e22614bf9565b60008712925087820587128484161615614e3e57614e3e614bf9565b87850587128184161615614e5457614e54614bf9565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614e9c57614e9c614bf9565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614ed057614ed0614bf9565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f0e57614f0e614bf9565b500290565b600082614f2257614f22614c9b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f7260c0830184614811565b98975050505050505050565b60008219821115614f9157614f91614bf9565b500190565b805163ffffffff811681146148dc57600080fd5b805160ff811681146148dc57600080fd5b600060c08284031215614fcd57600080fd5b60405160c0810181811067ffffffffffffffff82111715614ff057614ff0614529565b604052614ffc83614f96565b815261500a60208401614faa565b602082015261501b60408401614faa565b604082015261502c60608401614f96565b606082015261503d60808401614f96565b608082015261504e60a08401614a54565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361508b5761508b614bf9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff8316806150d4576150d4614c9b565b8060ff84160691505092915050565b600060ff821660ff8416808210156150fd576150fd614bf9565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"balance\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositERC20Transaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_mint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l2Oracle\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isOutputFinalized\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"paused_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provenWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2OutputIndex\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGasPayingToken\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_symbol\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LargeCalldata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoValue\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCustomGasToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SmallGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[]}]", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b620020971760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616011806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615431565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b6366004615565565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156b7565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156ca565b611089565b34801561036257600080fd5b506101936103713660046156f2565b611144565b34801561038257600080fd5b50610193610391366004615738565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156ca565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b366004615775565b611dd6565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611def565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615790565b611e49565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156ca565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157db565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120b3565b50610673828261225f565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615858565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c61252c565b6107bd89826158a0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615858565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a0565b909155506108a890508a8a8a8a8a8a6120b3565b50506108b4828261225f565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158b8565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158f2565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a919061592f565b519050610ba4610b9f36869003860186615994565b612608565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d87612664565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061592f565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a6159fa565b8a60400135612694565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a7e565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061592f565b602001516fffffffffffffffffffffffffffffffff166126b8565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a16201388061275e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156b7565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f982612664565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615858565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126b8565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061592f565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126b8565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127ba565b9150611d1f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cf6576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd89190615858565b9050866060015160386000828254611bf09190615b00565b909155505060408701516060880151611c209173ffffffffffffffffffffffffffffffffffffffff851691612818565b6060870151611c2f9082615b00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190615858565b14611cf4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d1a57611acd8660400151876080015160008960a001516127ba565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8190851515815260200190565b60405180910390a281158015611d975750326001145b15611dce576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611de3826010615b17565b61113e90615208615b47565b600080611dfa6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e41574791505090565b505060385490565b600054610100900460ff1615808015611e695750600054600160ff909116105b80611e835750303b158015611e83575060005460ff166001145b611f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61202e612873565b801561209157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120d5575073ffffffffffffffffffffffffffffffffffffffff861615155b1561210c576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121168151611dd6565b67ffffffffffffffff168367ffffffffffffffff161015612163576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a1576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121c2575033731111000000000000000000000000000000001111015b600086868686866040516020016121dd959493929190615a9b565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161224d91906156b7565b60405180910390a45050505050505050565b600154600090612295907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b00565b905060006122a1612986565b90506000816020015160ff16826000015163ffffffff166122c29190615ba2565b905082156123f9576001546000906122f9908390700100000000000000000000000000000000900467ffffffffffffffff16615c0a565b90506000836040015160ff16836123109190615c7e565b6001546123309084906fffffffffffffffffffffffffffffffff16615c7e565b61233a9190615ba2565b60015490915060009061238b906123649084906fffffffffffffffffffffffffffffffff16615d3a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a47565b905060018611156123ba576123b761236482876040015160ff1660018a6123b29190615b00565b612a66565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061242c908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124b9576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124e5906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615dae565b905060006124f748633b9aca00612abb565b6125019083615deb565b905060005a6125109088615b00565b9050808211156108b4576108b46125278284615b00565b612ad2565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120919085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612afb565b60008160000151826020015183604001518460600151604051602001612647949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612647979096959101615dff565b6000806126a086612c07565b90506126ae81868686612c39565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190615858565b61275690836158a0565b421192915050565b60018054829190601090612791908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127ca866000612c69565b905080612800576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261286e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612586565b505050565b600054610100900460ff1661290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e6a565b6000612a5c612a568585612c87565b83612c97565b90505b9392505050565b6000670de0b6b3a7640000612aa7612a7e8583615ba2565b612a9090670de0b6b3a7640000615c0a565b612aa285670de0b6b3a7640000615c7e565b612ca6565b612ab19086615c7e565b612a5c9190615ba2565b600081831015612acb5781612a5f565b5090919050565b6000805a90505b825a612ae59083615b00565b101561286e57612af482615f0d565b9150612ad9565b6000612b5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cd79092919063ffffffff16565b80519091501561286e5780806020019051810190612b7b9190615a7e565b61286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2391815260200190565b6040516020818303038152906040529050919050565b6000612c6084612c4a878686612ce6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612acb5781612a5f565b6000818312612acb5781612a5f565b6000612a5f670de0b6b3a764000083612cbe86613764565b612cc89190615c7e565b612cd29190615ba2565b6139a8565b6060612a5c8484600085613be7565b60606000845111612d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d5e84613d7d565b90506000612d6b86613e69565b9050600084604051602001612d8291815260200190565b60405160208183030381529060405290506000805b84518110156136db576000858281518110612db457612db4615f45565b602002602001015190508451831115612e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f085780518051602091820120604051612e9d92612e7792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b61305f565b805151602011612fbe5780518051602091820120604051612f3292612e7792910190815260200190565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b80518451602080870191909120825191909201201461305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b61306b601060016158a0565b8160200151510361324757845183036131df576130a5816020015160108151811061309857613098615f45565b6020026020010151613ecc565b96506000875111613138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b600186516131469190615b00565b82146131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a5f565b60008584815181106131f3576131f3615f45565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061321e5761321e615f45565b602002602001015190506132318161402c565b955061323e6001866158a0565b945050506136c8565b60028160200151510361364057600061325f82614051565b905060008160008151811061327657613276615f45565b016020015160f81c9050600061328d600283615f74565b613298906002615f96565b905060006132a9848360ff16614075565b905060006132b78a89614075565b905060006132c583836140ab565b905080835114613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff85166002148061336c575060ff85166003145b1561355b5780825114613401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61341b876020015160018151811061309857613098615f45565b9c5060008d51116134ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134bc9190615b00565b881461354a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a5f565b60ff8516158061356e575060ff85166001145b156135ad5761359a876020015160018151811061358d5761358d615f45565b602002602001015161402c565b99506135a6818a6158a0565b9850613635565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136c8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136d381615f0d565b915050612d97565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137dc8461415f565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139d957506000919050565b680755bf798b4a1bf1e58212613a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d209190615fb9565b60006040518083038185875af1925050503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b5091509150613d72828286614235565b979650505050505050565b80516060908067ffffffffffffffff811115613d9b57613d9b615325565b604051908082528060200260200182016040528015613de057816020015b6040805180820190915260608082526020820152815260200190600190039081613db95790505b50915060005b81811015613e62576040518060400160405280858381518110613e0b57613e0b615f45565b60200260200101518152602001613e3a868481518110613e2d57613e2d615f45565b6020026020010151614288565b815250838281518110613e4f57613e4f615f45565b6020908102919091010152600101613de6565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec1578060011b82018184015160001a8060041c8253600f811660018301535050600101613e93565b509295945050505050565b60606000806000613edc8561429b565b919450925090506000816001811115613ef757613ef7615fd5565b14613f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f8e82846158a0565b85511461401d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6085602001518484614d08565b606060208260000151106140485761404382613ecc565b61113e565b61113e82614d9c565b606061113e614070836020015160008151811061309857613098615f45565b613e69565b606082518210614094575060408051602081019091526000815261113e565b612a5f83838486516140a69190615b00565b614db2565b60008082518451106140be5782516140c1565b83515b90505b808210801561414857508282815181106140e0576140e0615f45565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411f5761411f615f45565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614158578160010191506140c4565b5092915050565b60008082116141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614244575081612a5f565b8251156142545782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156b7565b606061113e61429683614f8a565b615073565b600080600080846000015111614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f811161437e576000600160009450945094505050614d01565b60b7811161458c576000614393608083615b00565b90508087600001511161444e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144c757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d01915050565b60bf81116148da5760006145a160b783615b00565b90508087600001511161465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361473a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c603781116147fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61480881846158a0565b8951116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148c88360016158a0565b9750955060009450614d019350505050565b60f781116149bb5760006148ef60c083615b00565b9050808760000151116149aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d01915050565b60006149c860f783615b00565b905080876000015111614a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c2f81846158a0565b895111614ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cef8360016158a0565b9750955060019450614d019350505050565b9193909250565b60608167ffffffffffffffff811115614d2357614d23615325565b6040519080825280601f01601f191660200182016040528015614d4d576020820181803683370190505b5090508115612a5f576000614d6284866158a0565b90506020820160005b84811015614d83578281015182820152602001614d6b565b84811115614d92576000858301525b5050509392505050565b606061113e826020015160008460000151614d08565b60608182601f011015614e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f195760405191506000825260208201604052614f81565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f52578051835260209283019201614f3a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111615055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b606060008060006150838561429b565b91945092509050600181600181111561509e5761509e615fd5565b1461512b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513783856158a0565b146151c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151db5790505093506000835b86518110156152c95760008061524e6040518060400160405280858c600001516152329190615b00565b8152602001858c6020015161524791906158a0565b905261429b565b50915091506040518060400160405280838361526a91906158a0565b8152602001848b6020015161527f91906158a0565b81525088858151811061529457615294615f45565b60209081029190910101526152aa6001856158a0565b93506152b681836158a0565b6152c090846158a0565b92505050615208565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152f757600080fd5b50565b803567ffffffffffffffff8116811461531257600080fd5b919050565b80151581146152f757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561539b5761539b615325565b604052919050565b600082601f8301126153b457600080fd5b813567ffffffffffffffff8111156153ce576153ce615325565b6153ff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615354565b81815284602083860101111561541457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561544a57600080fd5b8635615455816152d5565b95506020870135945060408701359350615471606088016152fa565b9250608087013561548181615317565b915060a087013567ffffffffffffffff81111561549d57600080fd5b6154a989828a016153a3565b9150509295509295509295565b600060c082840312156154c857600080fd5b60405160c0810167ffffffffffffffff82821081831117156154ec576154ec615325565b816040528293508435835260208501359150615507826152d5565b8160208401526040850135915061551d826152d5565b816040840152606085013560608401526080850135608084015260a085013591508082111561554b57600080fd5b50615558858286016153a3565b60a0830152505092915050565b600080600080600085870360e081121561557e57600080fd5b863567ffffffffffffffff8082111561559657600080fd5b6155a28a838b016154b6565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155db57600080fd5b60408901955060c08901359250808311156155f557600080fd5b828901925089601f84011261560957600080fd5b823591508082111561561a57600080fd5b508860208260051b840101111561563057600080fd5b959894975092955050506020019190565b60005b8381101561565c578181015183820152602001615644565b838111156120915750506000910152565b60008151808452615685816020860160208601615641565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a5f602083018461566d565b6000602082840312156156dc57600080fd5b5035919050565b60ff811681146152f757600080fd5b6000806000806080858703121561570857600080fd5b8435615713816152d5565b93506020850135615723816156e3565b93969395505050506040820135916060013590565b60006020828403121561574a57600080fd5b813567ffffffffffffffff81111561576157600080fd5b61576d848285016154b6565b949350505050565b60006020828403121561578757600080fd5b612a5f826152fa565b6000806000606084860312156157a557600080fd5b83356157b0816152d5565b925060208401356157c0816152d5565b915060408401356157d0816152d5565b809150509250925092565b600080600080600060a086880312156157f357600080fd5b85356157fe816152d5565b945060208601359350615813604087016152fa565b9250606086013561582381615317565b9150608086013567ffffffffffffffff81111561583f57600080fd5b61584b888289016153a3565b9150509295509295909350565b60006020828403121561586a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158b3576158b3615871565b500190565b600080604083850312156158cb57600080fd5b82516158d6816152d5565b60208401519092506158e7816156e3565b809150509250929050565b60006020828403121561590457600080fd5b8151612a5f816152d5565b80516fffffffffffffffffffffffffffffffff8116811461531257600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964615325565b604052825181526159776020840161590f565b60208201526159886040840161590f565b60408201529392505050565b6000608082840312156159a657600080fd5b6040516080810181811067ffffffffffffffff821117156159c9576159c9615325565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1557615a15615325565b8360051b6020615a26818301615354565b868152918501918181019036841115615a3e57600080fd5b865b84811015615a7257803586811115615a585760008081fd5b615a6436828b016153a3565b845250918301918301615a40565b50979650505050505050565b600060208284031215615a9057600080fd5b8151612a5f81615317565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615aef816049850160208701615641565b919091016049019695505050505050565b600082821015615b1257615b12615871565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b3e57615b3e615871565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b6a57615b6a615871565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb157615bb1615b73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0557615c05615871565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4457615c44615871565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c7857615c78615871565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615871565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615871565b60008712925087820587128484161615615d1657615d16615871565b87850587128184161615615d2c57615d2c615871565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7457615d74615871565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615da857615da8615871565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615de657615de6615871565b500290565b600082615dfa57615dfa615b73565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e4a60c083018461566d565b98975050505050505050565b805163ffffffff8116811461531257600080fd5b600060c08284031215615e7c57600080fd5b60405160c0810181811067ffffffffffffffff82111715615e9f57615e9f615325565b604052615eab83615e56565b81526020830151615ebb816156e3565b60208201526040830151615ece816156e3565b6040820152615edf60608401615e56565b6060820152615ef060808401615e56565b6080820152615f0160a0840161590f565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f3e57615f3e615871565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8757615f87615b73565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb057615fb0615871565b90039392505050565b60008251615fcb818460208701615641565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", } // OptimismPortalABI is the input ABI used to generate the binding from. @@ -219,6 +219,37 @@ func (_OptimismPortal *OptimismPortalTransactorRaw) Transact(opts *bind.Transact return _OptimismPortal.Contract.contract.Transact(opts, method, params...) } +// Balance is a free data retrieval call binding the contract method 0xb69ef8a8. +// +// Solidity: function balance() view returns(uint256) +func (_OptimismPortal *OptimismPortalCaller) Balance(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "balance") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Balance is a free data retrieval call binding the contract method 0xb69ef8a8. +// +// Solidity: function balance() view returns(uint256) +func (_OptimismPortal *OptimismPortalSession) Balance() (*big.Int, error) { + return _OptimismPortal.Contract.Balance(&_OptimismPortal.CallOpts) +} + +// Balance is a free data retrieval call binding the contract method 0xb69ef8a8. +// +// Solidity: function balance() view returns(uint256) +func (_OptimismPortal *OptimismPortalCallerSession) Balance() (*big.Int, error) { + return _OptimismPortal.Contract.Balance(&_OptimismPortal.CallOpts) +} + // FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. // // Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) @@ -250,6 +281,51 @@ func (_OptimismPortal *OptimismPortalCallerSession) FinalizedWithdrawals(arg0 [3 return _OptimismPortal.Contract.FinalizedWithdrawals(&_OptimismPortal.CallOpts, arg0) } +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_OptimismPortal *OptimismPortalCaller) GasPayingToken(opts *bind.CallOpts) (struct { + Addr common.Address + Decimals uint8 +}, error) { + var out []interface{} + err := _OptimismPortal.contract.Call(opts, &out, "gasPayingToken") + + outstruct := new(struct { + Addr common.Address + Decimals uint8 + }) + if err != nil { + return *outstruct, err + } + + outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) + + return *outstruct, err + +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_OptimismPortal *OptimismPortalSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _OptimismPortal.Contract.GasPayingToken(&_OptimismPortal.CallOpts) +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_OptimismPortal *OptimismPortalCallerSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _OptimismPortal.Contract.GasPayingToken(&_OptimismPortal.CallOpts) +} + // Guardian is a free data retrieval call binding the contract method 0x452a9320. // // Solidity: function guardian() view returns(address) @@ -629,6 +705,27 @@ func (_OptimismPortal *OptimismPortalCallerSession) Version() (string, error) { return _OptimismPortal.Contract.Version(&_OptimismPortal.CallOpts) } +// DepositERC20Transaction is a paid mutator transaction binding the contract method 0x149f2f22. +// +// Solidity: function depositERC20Transaction(address _to, uint256 _mint, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) returns() +func (_OptimismPortal *OptimismPortalTransactor) DepositERC20Transaction(opts *bind.TransactOpts, _to common.Address, _mint *big.Int, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { + return _OptimismPortal.contract.Transact(opts, "depositERC20Transaction", _to, _mint, _value, _gasLimit, _isCreation, _data) +} + +// DepositERC20Transaction is a paid mutator transaction binding the contract method 0x149f2f22. +// +// Solidity: function depositERC20Transaction(address _to, uint256 _mint, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) returns() +func (_OptimismPortal *OptimismPortalSession) DepositERC20Transaction(_to common.Address, _mint *big.Int, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { + return _OptimismPortal.Contract.DepositERC20Transaction(&_OptimismPortal.TransactOpts, _to, _mint, _value, _gasLimit, _isCreation, _data) +} + +// DepositERC20Transaction is a paid mutator transaction binding the contract method 0x149f2f22. +// +// Solidity: function depositERC20Transaction(address _to, uint256 _mint, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) returns() +func (_OptimismPortal *OptimismPortalTransactorSession) DepositERC20Transaction(_to common.Address, _mint *big.Int, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { + return _OptimismPortal.Contract.DepositERC20Transaction(&_OptimismPortal.TransactOpts, _to, _mint, _value, _gasLimit, _isCreation, _data) +} + // DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. // // Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() @@ -734,6 +831,27 @@ func (_OptimismPortal *OptimismPortalTransactorSession) ProveWithdrawalTransacti return _OptimismPortal.Contract.ProveWithdrawalTransaction(&_OptimismPortal.TransactOpts, _tx, _l2OutputIndex, _outputRootProof, _withdrawalProof) } +// SetGasPayingToken is a paid mutator transaction binding the contract method 0x71cfaa3f. +// +// Solidity: function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) returns() +func (_OptimismPortal *OptimismPortalTransactor) SetGasPayingToken(opts *bind.TransactOpts, _token common.Address, _decimals uint8, _name [32]byte, _symbol [32]byte) (*types.Transaction, error) { + return _OptimismPortal.contract.Transact(opts, "setGasPayingToken", _token, _decimals, _name, _symbol) +} + +// SetGasPayingToken is a paid mutator transaction binding the contract method 0x71cfaa3f. +// +// Solidity: function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) returns() +func (_OptimismPortal *OptimismPortalSession) SetGasPayingToken(_token common.Address, _decimals uint8, _name [32]byte, _symbol [32]byte) (*types.Transaction, error) { + return _OptimismPortal.Contract.SetGasPayingToken(&_OptimismPortal.TransactOpts, _token, _decimals, _name, _symbol) +} + +// SetGasPayingToken is a paid mutator transaction binding the contract method 0x71cfaa3f. +// +// Solidity: function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) returns() +func (_OptimismPortal *OptimismPortalTransactorSession) SetGasPayingToken(_token common.Address, _decimals uint8, _name [32]byte, _symbol [32]byte) (*types.Transaction, error) { + return _OptimismPortal.Contract.SetGasPayingToken(&_OptimismPortal.TransactOpts, _token, _decimals, _name, _symbol) +} + // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() diff --git a/op-bindings/bindings/standardbridge.go b/op-bindings/bindings/standardbridge.go index eb5866bb725..d7e1c959c18 100644 --- a/op-bindings/bindings/standardbridge.go +++ b/op-bindings/bindings/standardbridge.go @@ -30,7 +30,7 @@ var ( // StandardBridgeMetaData contains all meta data concerning the StandardBridge contract. var StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", } // StandardBridgeABI is the input ABI used to generate the binding from. @@ -491,6 +491,48 @@ func (_StandardBridge *StandardBridgeTransactorSession) FinalizeBridgeETH(_from return _StandardBridge.Contract.FinalizeBridgeETH(&_StandardBridge.TransactOpts, _from, _to, _amount, _extraData) } +// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() returns(address, uint8) +func (_StandardBridge *StandardBridgeTransactor) GasPayingToken(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "gasPayingToken") +} + +// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() returns(address, uint8) +func (_StandardBridge *StandardBridgeSession) GasPayingToken() (*types.Transaction, error) { + return _StandardBridge.Contract.GasPayingToken(&_StandardBridge.TransactOpts) +} + +// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() returns(address, uint8) +func (_StandardBridge *StandardBridgeTransactorSession) GasPayingToken() (*types.Transaction, error) { + return _StandardBridge.Contract.GasPayingToken(&_StandardBridge.TransactOpts) +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_StandardBridge *StandardBridgeTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { + return _StandardBridge.contract.Transact(opts, "isCustomGasToken") +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_StandardBridge *StandardBridgeSession) IsCustomGasToken() (*types.Transaction, error) { + return _StandardBridge.Contract.IsCustomGasToken(&_StandardBridge.TransactOpts) +} + +// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() returns(bool) +func (_StandardBridge *StandardBridgeTransactorSession) IsCustomGasToken() (*types.Transaction, error) { + return _StandardBridge.Contract.IsCustomGasToken(&_StandardBridge.TransactOpts) +} + // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() diff --git a/op-bindings/bindings/systemconfig.go b/op-bindings/bindings/systemconfig.go index 7a8b5b34772..bd1f15cc016 100644 --- a/op-bindings/bindings/systemconfig.go +++ b/op-bindings/bindings/systemconfig.go @@ -46,12 +46,13 @@ type SystemConfigAddresses struct { L2OutputOracle common.Address OptimismPortal common.Address OptimismMintableERC20Factory common.Address + GasPayingToken common.Address } // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_OUTPUT_ORACLE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2OutputOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setResourceConfig\",\"inputs\":[{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200004962000032600160008051602062002a4783398151915262000c39565b60001b600019620000c960201b62000e061760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a08088018490528851968701895283875293860183905296850182905284018190529483018590528201849052620000c39361dead9390928392839290918391908290620000cd565b62000d5c565b9055565b600054610100900460ff1615808015620000ee5750600054600160ff909116105b806200011e57506200010b30620004df60201b62000e0a1760201c565b1580156200011e575060005460ff166001145b620001875760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001ab576000805461ff0019166101001790555b620001b5620004ee565b620001c08a62000556565b620001cb87620005d5565b620001d7898962000627565b620001e2866200068b565b620002197f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000c960201b62000e061760201c565b6200025f6200024a60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862000c39565b60001b84620000c960201b62000e061760201c565b620002a96200029060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762000c39565b60001b8360000151620000c960201b62000e061760201c565b620002f3620002da60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862000c39565b60001b8360200151620000c960201b62000e061760201c565b6200033d6200032460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762000c39565b60001b8360400151620000c960201b62000e061760201c565b620003876200036e60017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181662000c39565b60001b8360600151620000c960201b62000e061760201c565b620003d1620003b860017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad62000c39565b60001b8360800151620000c960201b62000e061760201c565b6200041b6200040260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62000c39565b60001b8360a00151620000c960201b62000e061760201c565b6200042562000728565b620004308462000799565b6200043a62000add565b6001600160401b0316866001600160401b031610156200048c5760405162461bcd60e51b815260206004820152601f6024820152600080516020620029e783398151915260448201526064016200017e565b8015620004d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff166200054a5760405162461bcd60e51b815260206004820152602b602482015260008051602062002a2783398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200017e565b6200055462000b0a565b565b6200056062000b71565b6001600160a01b038116620005c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200017e565b620005d28162000bcd565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062002a07833981519152836040516200061b919062000c53565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062002a07833981519152836040516200067e919062000c53565b60405180910390a3505050565b6200069562000add565b6001600160401b0316816001600160401b03161015620006e75760405162461bcd60e51b815260206004820152601f6024820152600080516020620029e783398151915260448201526064016200017e565b606880546001600160401b0319166001600160401b0383169081179091556040805160208082019390935281518082039093018352810190526002620005f9565b6200075c62000748600160008051602062002a4783398151915262000c39565b60001b62000c1f60201b62000e261760201c565b60000362000554576200055462000784600160008051602062002a4783398151915262000c39565b60001b43620000c960201b62000e061760201c565b8060a001516001600160801b0316816060015163ffffffff161115620008285760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016200017e565b6001816040015160ff1611620008995760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b60648201526084016200017e565b606854608082015182516001600160401b0390921691620008bb919062000cab565b63ffffffff161115620009005760405162461bcd60e51b815260206004820152601f6024820152600080516020620029e783398151915260448201526064016200017e565b6000816020015160ff1611620009715760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b60648201526084016200017e565b8051602082015163ffffffff82169160ff909116906200099390829062000cd6565b6200099f919062000d08565b63ffffffff161462000a1a5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016200017e565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000b059063ffffffff6a010000000000000000000082048116911662000d37565b905090565b600054610100900460ff1662000b665760405162461bcd60e51b815260206004820152602b602482015260008051602062002a2783398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200017e565b620005543362000bcd565b6033546001600160a01b03163314620005545760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200017e565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b634e487b7160e01b600052601160045260246000fd5b60008282101562000c4e5762000c4e62000c23565b500390565b600060208083528351808285015260005b8181101562000c825785810183015185820160400152820162000c64565b8181111562000c95576000604083870101525b50601f01601f1916929092016040019392505050565b600063ffffffff80831681851680830382111562000ccd5762000ccd62000c23565b01949350505050565b600063ffffffff8084168062000cfc57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562000d2e5762000d2e62000c23565b02949350505050565b60006001600160401b0382811684821680830382111562000ccd5762000ccd62000c23565b611c7b8062000d6c6000396000f3fe608060405234801561001057600080fd5b50600436106102415760003560e01c8063935f029e11610145578063dac6e63a116100bd578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610597578063fd32aa0f1461059f578063ffa1ad74146105a757600080fd5b8063f45e65d81461057a578063f68016b71461058357600080fd5b8063dac6e63a1461054e578063e0e2016d14610556578063e81b2c6d1461055e578063f2fde38b1461056757600080fd5b8063bc49ce5f11610114578063c71973f6116100f9578063c71973f6146103f4578063c9b26f6114610407578063cc731b021461041a57600080fd5b8063bc49ce5f146103e4578063c4e8ddfa146103ec57600080fd5b8063935f029e146103ae5780639b7d7f0a146103c1578063a7119869146103c9578063b40a817c146103d157600080fd5b806348cd4cb1116101d857806354fd4d50116101a757806361d157681161018c57806361d1576814610380578063715018a6146103885780638da5cb5b1461039057600080fd5b806354fd4d501461032f5780635d73369c1461037857600080fd5b806348cd4cb1146102d75780634add321d146102df5780634d9f1559146103005780634f16540b1461030857600080fd5b80630c18c162116102145780630c18c162146102ab57806318d13918146102b457806319f5cea8146102c75780631fd19ee1146102cf57600080fd5b806306c9265714610246578063078f29cf146102615780630a49cb031461028e5780630bbb796814610296575b600080fd5b61024e6105af565b6040519081526020015b60405180910390f35b6102696105dd565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610258565b610269610616565b6102a96102a4366004611928565b610646565b005b61024e60655481565b6102a96102c2366004611a55565b610a44565b61024e610a58565b610269610a83565b61024e610aad565b6102e7610add565b60405167ffffffffffffffff9091168152602001610258565b610269610b03565b61024e7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61036b6040518060400160405280600681526020017f312e31322e30000000000000000000000000000000000000000000000000000081525081565b6040516102589190611ae2565b61024e610b33565b61024e610b5e565b6102a9610b89565b60335473ffffffffffffffffffffffffffffffffffffffff16610269565b6102a96103bc366004611af5565b610b9d565b610269610bb3565b610269610be3565b6102a96103df366004611b17565b610c13565b61024e610c24565b610269610c4f565b6102a9610402366004611b32565b610c7f565b6102a9610415366004611b4e565b610c90565b6104de6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102589190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b610269610ca1565b61024e610cd1565b61024e60675481565b6102a9610575366004611a55565b610cfc565b61024e60665481565b6068546102e79067ffffffffffffffff1681565b61024e610db0565b61024e610ddb565b61024e600081565b6105da60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b81565b600061061161060d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b5490565b905090565b600061061161060d60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b600054610100900460ff16158080156106665750600054600160ff909116105b806106805750303b158015610680575060005460ff166001145b610711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561076f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b610777610e2a565b6107808a610cfc565b61078987610ec9565b6107938989610f2a565b61079c86610fbb565b6107c57f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6107f86107f360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b849055565b61082c61082660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b83519055565b61086361085a60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b60208401519055565b61089a61089160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b60408401519055565b6108d16108c860017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a6871816611b96565b60608401519055565b6109086108ff60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b60808401519055565b61093f61093660017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b60a08401519055565b610947611099565b61095084611101565b610958610add565b67ffffffffffffffff168667ffffffffffffffff1610156109d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b8015610a3857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b610a4c611575565b610a55816115f6565b50565b6105da60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b60006106117f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b600061061161060d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b6069546000906106119063ffffffff6a0100000000000000000000820481169116611bad565b600061061161060d60017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a6871816611b96565b6105da60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b6105da60017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a6871816611b96565b610b91611575565b610b9b600061167a565b565b610ba5611575565b610baf8282610f2a565b5050565b600061061161060d60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d611b96565b600061061161060d60017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637611b96565b610c1b611575565b610a5581610fbb565b6105da60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b600061061161060d60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8611b96565b610c87611575565b610a5581611101565b610c98611575565b610a5581610ec9565b600061061161060d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598611b96565b6105da60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b610d04611575565b73ffffffffffffffffffffffffffffffffffffffff8116610da7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610708565b610a558161167a565b6105da60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377611b96565b6105da60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad611b96565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b5490565b600054610100900460ff16610ec1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610708565b610b9b6116f1565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610f1e9190611ae2565b60405180910390a35050565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051610fae9190611ae2565b60405180910390a3505050565b610fc3610add565b67ffffffffffffffff168167ffffffffffffffff161015611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002610eed565b6110c761060d60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b600003610b9b57610b9b6110fc60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0611b96565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff1611156111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610708565b6001816040015160ff1611611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610708565b6068546080820151825167ffffffffffffffff909216916112699190611bd9565b63ffffffff1611156112d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610708565b6000816020015160ff161161136e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610708565b8051602082015163ffffffff82169160ff9091169061138e908290611bf8565b6113989190611c42565b63ffffffff161461142b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610708565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610b9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610708565b61161f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506003610eed565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611788576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610708565b610b9b3361167a565b803573ffffffffffffffffffffffffffffffffffffffff811681146117b557600080fd5b919050565b803567ffffffffffffffff811681146117b557600080fd5b60405160c0810167ffffffffffffffff8111828210171561181c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803563ffffffff811681146117b557600080fd5b803560ff811681146117b557600080fd5b600060c0828403121561185957600080fd5b60405160c0810181811067ffffffffffffffff821117156118a3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050806118b283611822565b81526118c060208401611836565b60208201526118d160408401611836565b60408201526118e260608401611822565b60608201526118f360808401611822565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461191b57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361026081121561194857600080fd5b6119518b611791565b995060208b0135985060408b0135975060608b0135965061197460808c016117ba565b955061198260a08c01611791565b94506119918c60c08d01611847565b93506119a06101808c01611791565b925060c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156119d257600080fd5b506119db6117d2565b6119e86101a08c01611791565b81526119f76101c08c01611791565b6020820152611a096101e08c01611791565b6040820152611a1b6102008c01611791565b6060820152611a2d6102208c01611791565b6080820152611a3f6102408c01611791565b60a0820152809150509295985092959850929598565b600060208284031215611a6757600080fd5b611a7082611791565b9392505050565b6000815180845260005b81811015611a9d57602081850181015186830182015201611a81565b81811115611aaf576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a706020830184611a77565b60008060408385031215611b0857600080fd5b50508035926020909101359150565b600060208284031215611b2957600080fd5b611a70826117ba565b600060c08284031215611b4457600080fd5b611a708383611847565b600060208284031215611b6057600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611ba857611ba8611b67565b500390565b600067ffffffffffffffff808316818516808303821115611bd057611bd0611b67565b01949350505050565b600063ffffffff808316818516808303821115611bd057611bd0611b67565b600063ffffffff80841680611c36577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615611c6557611c65611b67565b0294935050505056fea164736f6c634300080f000a53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069a11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_OUTPUT_ORACLE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasPayingToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2OutputOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setResourceConfig\",\"inputs\":[{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b50620000496200003260016000805160206200382983398151915262001086565b60001b600019620000d160201b62000ed21760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b620012af565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000ed61760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000ed21760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001086565b60001b84620000d160201b62000ed21760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001086565b60001b8360000151620000d160201b62000ed21760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001086565b60001b8360200151620000d160201b62000ed21760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001086565b60001b8360400151620000d160201b62000ed21760201c565b6200038f6200037660017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181662001086565b60001b8360600151620000d160201b62000ed21760201c565b620003c8620003af60016000805160206200380983398151915262001086565b60001b8360800151620000d160201b62000ed21760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001086565b60001b8360a00151620000d160201b62000ed21760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a15565b6200044162000d59565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d86565b565b6200056762000ded565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e49565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b6000600080516020620037c983398151915283604051620006229190620010cf565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f19818403018152919052905060016000600080516020620037c983398151915283604051620006859190620010cf565b60405180910390a3505050565b6200069c62000d59565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200382983398151915262001086565b60001b62000e9b60201b620006a41760201c565b6000036200055b576200055b6200078b60016000805160206200382983398151915262001086565b60001b43620000d160201b62000ed21760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000820573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000846919062001104565b60ff1614620008af5760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b60006200092f826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200091e919081019062001146565b62000e9f60201b62000ef21760201c565b9050600062000976836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b905062000992836012848462000f3760201b62000f951760201c565b6200099c62001024565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b158015620009f757600080fd5b505af115801562000a0c573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000aa45760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b155760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b379190620011fe565b63ffffffff16111562000b7c5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b6000816020015160ff161162000bed5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c0f90829062001229565b62000c1b91906200125b565b63ffffffff161462000c965760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d819063ffffffff6a01000000000000000000008204811691166200128a565b905090565b600054610100900460ff1662000de25760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e49565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b600060208251111562000f1b5760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f31826200104660201b620010671760201c565b92915050565b62000f9262000f6860017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec62001086565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000ed21760201c565b62000fd862000fc360017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001086565b60001b83620000d160201b62000ed21760201c565b6200101e6200100960017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001086565b60001b82620000d160201b62000ed21760201c565b50505050565b600062000d816200074f60016000805160206200380983398151915262001086565b8051602181106200105f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b634e487b7160e01b600052601160045260246000fd5b6000828210156200109b576200109b62001070565b500390565b60005b83811015620010bd578181015183820152602001620010a3565b838111156200101e5750506000910152565b6020815260008251806020840152620010f0816040850160208701620010a0565b601f01601f19169190910160400192915050565b6000602082840312156200111757600080fd5b815160ff811681146200112957600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200115957600080fd5b81516001600160401b03808211156200117157600080fd5b818401915084601f8301126200118657600080fd5b8151818111156200119b576200119b62001130565b604051601f8201601f19908116603f01168101908382118183101715620011c657620011c662001130565b81604052828152876020848701011115620011e057600080fd5b620011f3836020830160208801620010a0565b979650505050505050565b600063ffffffff80831681851680830382111562001220576200122062001070565b01949350505050565b600063ffffffff808416806200124f57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562001281576200128162001070565b02949350505050565b60006001600160401b0382811684821680830382111562001220576200122062001070565b6124ea80620012bf6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063935f029e11610160578063d8444715116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461062e578063fd32aa0f14610636578063ffa1ad741461063e57600080fd5b8063f45e65d814610611578063f68016b71461061a57600080fd5b8063e0e2016d116100bd578063e0e2016d146105ed578063e81b2c6d146105f5578063f2fde38b146105fe57600080fd5b8063d8444715146105dd578063dac6e63a146105e557600080fd5b8063bc49ce5f1161012f578063c71973f611610114578063c71973f614610483578063c9b26f6114610496578063cc731b02146104a957600080fd5b8063bc49ce5f14610473578063c4e8ddfa1461047b57600080fd5b8063935f029e1461043d5780639b7d7f0a14610450578063a711986914610458578063b40a817c1461046057600080fd5b80634add321d1161020e578063550fcdc9116101c257806361d15768116101a757806361d157681461040f578063715018a6146104175780638da5cb5b1461041f57600080fd5b8063550fcdc9146103ff5780635d73369c1461040757600080fd5b80634d9f1559116101f35780634d9f1559146103875780634f16540b1461038f57806354fd4d50146103b657600080fd5b80634add321d146103535780634c1e843d1461037457600080fd5b806318d13918116102655780631fd19ee11161024a5780631fd19ee11461030d5780634397dfef1461031557806348cd4cb11461034b57600080fd5b806318d13918146102f057806319f5cea81461030557600080fd5b806306c9265714610297578063078f29cf146102b25780630a49cb03146102df5780630c18c162146102e7575b600080fd5b61029f610646565b6040519081526020015b60405180910390f35b6102ba610674565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a9565b6102ba6106ad565b61029f60655481565b6103036102fe366004611f41565b6106dd565b005b61029f6106f1565b6102ba61071c565b61031d610746565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102a9565b61029f61075a565b61035b61078a565b60405167ffffffffffffffff90911681526020016102a9565b6103036103823660046120b4565b6107b0565b6102ba610bbb565b61029f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103f26040518060400160405280600681526020017f312e31322e30000000000000000000000000000000000000000000000000000081525081565b6040516102a99190612269565b6103f2610beb565b61029f610bf5565b61029f610c20565b610303610c4b565b60335473ffffffffffffffffffffffffffffffffffffffff166102ba565b61030361044b36600461227c565b610c5f565b6102ba610c75565b6102ba610ca5565b61030361046e36600461229e565b610cd5565b61029f610ce6565b6102ba610d11565b6103036104913660046122b9565b610d41565b6103036104a43660046122d5565b610d52565b61056d6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102a99190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6103f2610d63565b6102ba610d6d565b61029f610d9d565b61029f60675481565b61030361060c366004611f41565b610dc8565b61029f60665481565b60685461035b9067ffffffffffffffff1681565b61029f610e7c565b61029f610ea7565b61029f600081565b61067160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b81565b60006106a86106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b5490565b905090565b60006106a86106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b6106e5611090565b6106ee81611111565b50565b61067160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60006106a87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107516111ce565b90939092509050565b60006106a86106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b6069546000906106a89063ffffffff6a0100000000000000000000820481169116612334565b600054610100900460ff16158080156107d05750600054600160ff909116105b806107ea5750303b1580156107ea575060005460ff166001145b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108e161124b565b6108ea8a610dc8565b6108f3876112ea565b6108fd8989611312565b610906866113a3565b61092f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b61096261095d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b849055565b61099661099060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b83519055565b6109cd6109c460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60208401519055565b610a046109fb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b60408401519055565b610a3b610a3260017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181661231d565b60608401519055565b610a72610a6960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b60808401519055565b610aa9610aa060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60a08401519055565b610ab1611481565b610abe8260c001516114e9565b610ac7846117e2565b610acf61078a565b67ffffffffffffffff168667ffffffffffffffff161015610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b8015610baf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60006106a86106a460017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181661231d565b60606106a8611c56565b61067160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b61067160017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181661231d565b610c53611090565b610c5d6000611d17565b565b610c67611090565b610c718282611312565b5050565b60006106a86106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60006106a86106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610cdd611090565b6106ee816113a3565b61067160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b60006106a86106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b610d49611090565b6106ee816117e2565b610d5a611090565b6106ee816112ea565b60606106a8611d8e565b60006106a86106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b61067160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b610dd0611090565b73ffffffffffffffffffffffffffffffffffffffff8116610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610872565b6106ee81611d17565b61067160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b61067160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e203332206279746573000000000000000000006064820152608401610872565b610f8f82611067565b92915050565b610ffb610fc360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61102e61102960017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b839055565b61106161105c60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b829055565b50505050565b80516021811061107f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610872565b61113a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516111c29190612269565b60405180910390a35050565b600080806112006106a460017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261123f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b600054610100900460ff166112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c5d611e44565b6067819055604080516020808201849052825180830390910181529082019091526000611191565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113969190612269565b60405180910390a3505050565b6113ab61078a565b67ffffffffffffffff168167ffffffffffffffff161015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611191565b6114af6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b600003610c5d57610c5d6114e460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611538575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b156106ee57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190612360565b60ff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e0000000000000000000000000000000000006064820152608401610872565b60006116dc8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116d7919081019061237d565b610ef2565b9050600061172e8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b905061173d8360128484610f95565b6117456106ad565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610872565b6001816040015160ff1611611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610872565b6068546080820151825167ffffffffffffffff9092169161194a9190612448565b63ffffffff1611156119b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b6000816020015160ff1611611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610872565b8051602082015163ffffffff82169160ff90911690611a6f908290612467565b611a7991906124b1565b63ffffffff1614611b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610872565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611c626111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cdb57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b611ee4565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611d9a6111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e1357505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b600054610100900460ff16611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c5d33611d17565b60405160005b82811a15611efa57600101611eea565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f3c57600080fd5b919050565b600060208284031215611f5357600080fd5b611f5c82611f18565b9392505050565b803567ffffffffffffffff81168114611f3c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611fcd57611fcd611f7b565b60405290565b803563ffffffff81168114611f3c57600080fd5b60ff811681146106ee57600080fd5b600060c0828403121561200857600080fd5b60405160c0810181811067ffffffffffffffff8211171561202b5761202b611f7b565b60405290508061203a83611fd3565b8152602083013561204a81611fe7565b6020820152604083013561205d81611fe7565b604082015261206e60608401611fd3565b606082015261207f60808401611fd3565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146120a757600080fd5b60a0919091015292915050565b6000806000806000806000806000898b036102808112156120d457600080fd5b6120dd8b611f18565b995060208b0135985060408b0135975060608b0135965061210060808c01611f63565b955061210e60a08c01611f18565b945061211d8c60c08d01611ff6565b935061212c6101808c01611f18565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe608201121561215e57600080fd5b50612167611faa565b6121746101a08c01611f18565b81526121836101c08c01611f18565b60208201526121956101e08c01611f18565b60408201526121a76102008c01611f18565b60608201526121b96102208c01611f18565b60808201526121cb6102408c01611f18565b60a08201526121dd6102608c01611f18565b60c0820152809150509295985092959850929598565b60005b8381101561220e5781810151838201526020016121f6565b838111156110615750506000910152565b600081518084526122378160208601602086016121f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f5c602083018461221f565b6000806040838503121561228f57600080fd5b50508035926020909101359150565b6000602082840312156122b057600080fd5b611f5c82611f63565b600060c082840312156122cb57600080fd5b611f5c8383611ff6565b6000602082840312156122e757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561232f5761232f6122ee565b500390565b600067ffffffffffffffff808316818516808303821115612357576123576122ee565b01949350505050565b60006020828403121561237257600080fd5b8151611f5c81611fe7565b60006020828403121561238f57600080fd5b815167ffffffffffffffff808211156123a757600080fd5b818401915084601f8301126123bb57600080fd5b8151818111156123cd576123cd611f7b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561241357612413611f7b565b8160405282815287602084870101111561242c57600080fd5b61243d8360208301602088016121f3565b979650505050505050565b600063ffffffff808316818516808303821115612357576123576122ee565b600063ffffffff808416806124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156124d4576124d46122ee565b0294935050505056fea164736f6c634300080f000a53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -624,6 +625,113 @@ func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) } +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_SystemConfig *SystemConfigCaller) GasPayingToken(opts *bind.CallOpts) (struct { + Addr common.Address + Decimals uint8 +}, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "gasPayingToken") + + outstruct := new(struct { + Addr common.Address + Decimals uint8 + }) + if err != nil { + return *outstruct, err + } + + outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) + + return *outstruct, err + +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_SystemConfig *SystemConfigSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _SystemConfig.Contract.GasPayingToken(&_SystemConfig.CallOpts) +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) +func (_SystemConfig *SystemConfigCallerSession) GasPayingToken() (struct { + Addr common.Address + Decimals uint8 +}, error) { + return _SystemConfig.Contract.GasPayingToken(&_SystemConfig.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_SystemConfig *SystemConfigCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "gasPayingTokenName") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_SystemConfig *SystemConfigSession) GasPayingTokenName() (string, error) { + return _SystemConfig.Contract.GasPayingTokenName(&_SystemConfig.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_SystemConfig *SystemConfigCallerSession) GasPayingTokenName() (string, error) { + return _SystemConfig.Contract.GasPayingTokenName(&_SystemConfig.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_SystemConfig *SystemConfigCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "gasPayingTokenSymbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_SystemConfig *SystemConfigSession) GasPayingTokenSymbol() (string, error) { + return _SystemConfig.Contract.GasPayingTokenSymbol(&_SystemConfig.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_SystemConfig *SystemConfigCallerSession) GasPayingTokenSymbol() (string, error) { + return _SystemConfig.Contract.GasPayingTokenSymbol(&_SystemConfig.CallOpts) +} + // L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // // Solidity: function l1CrossDomainMessenger() view returns(address addr_) @@ -1058,23 +1166,23 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0x0bbb7968. +// Initialize is a paid mutator transaction binding the contract method 0x4c1e843d. // -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address,address) _addresses) returns() func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { return _SystemConfig.contract.Transact(opts, "initialize", _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) } -// Initialize is a paid mutator transaction binding the contract method 0x0bbb7968. +// Initialize is a paid mutator transaction binding the contract method 0x4c1e843d. // -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address,address) _addresses) returns() func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) } -// Initialize is a paid mutator transaction binding the contract method 0x0bbb7968. +// Initialize is a paid mutator transaction binding the contract method 0x4c1e843d. // -// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +// Solidity: function initialize(address _owner, uint256 _overhead, uint256 _scalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address,address) _addresses) returns() func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _overhead *big.Int, _scalar *big.Int, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config ResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _overhead, _scalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) } diff --git a/op-bindings/bindings/weth.go b/op-bindings/bindings/weth.go new file mode 100644 index 00000000000..7b2eb50b795 --- /dev/null +++ b/op-bindings/bindings/weth.go @@ -0,0 +1,1133 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// WETHMetaData contains all meta data concerning the WETH contract. +var WETHMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"fallback\",\"stateMutability\":\"payable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"guy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"wad\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"name\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"symbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"dst\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"wad\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"src\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"dst\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"wad\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"wad\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"src\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"guy\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"wad\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"dst\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"wad\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"src\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"dst\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"wad\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Withdrawal\",\"inputs\":[{\"name\":\"src\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"wad\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x608060405234801561001057600080fd5b50610add806100206000396000f3fe6080604052600436106100c05760003560e01c8063313ce56711610074578063a9059cbb1161004e578063a9059cbb146101f8578063d0e30db0146100cf578063dd62ed3e14610218576100cf565b8063313ce5671461018f57806370a08231146101b657806395d89b41146101e3576100cf565b806318160ddd116100a557806318160ddd1461013257806323b872dd1461014f5780632e1a7d4d1461016f576100cf565b806306fdde03146100d7578063095ea7b314610102576100cf565b366100cf576100cd610250565b005b6100cd610250565b3480156100e357600080fd5b506100ec6102ab565b6040516100f991906107a7565b60405180910390f35b34801561010e57600080fd5b5061012261011d366004610821565b610376565b60405190151581526020016100f9565b34801561013e57600080fd5b50475b6040519081526020016100f9565b34801561015b57600080fd5b5061012261016a36600461084b565b6103ef565b34801561017b57600080fd5b506100cd61018a366004610887565b610606565b34801561019b57600080fd5b506101a4601281565b60405160ff90911681526020016100f9565b3480156101c257600080fd5b506101416101d13660046108a0565b60006020819052908152604090205481565b3480156101ef57600080fd5b506100ec6106ac565b34801561020457600080fd5b50610122610213366004610821565b610763565b34801561022457600080fd5b506101416102333660046108bb565b600160209081526000928352604080842090915290825290205481565b336000908152602081905260408120805434929061026f90849061091d565b909155505060405134815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c9060200160405180910390a2565b606073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663d84447156040518163ffffffff1660e01b8152600401600060405180830381865afa15801561030c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526103529190810190610964565b6040516020016103629190610a2f565b604051602081830303815290604052905090565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906103de9086815260200190565b60405180910390a350600192915050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604081205482111561042157600080fd5b73ffffffffffffffffffffffffffffffffffffffff84163314801590610497575073ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14155b1561051f5773ffffffffffffffffffffffffffffffffffffffff841660009081526001602090815260408083203384529091529020548211156104d957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8416600090815260016020908152604080832033845290915281208054849290610519908490610a74565b90915550505b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604081208054849290610554908490610a74565b909155505073ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120805484929061058e90849061091d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516105f491815260200190565b60405180910390a35060019392505050565b3360009081526020819052604090205481111561062257600080fd5b3360009081526020819052604081208054839290610641908490610a74565b9091555050604051339082156108fc029083906000818181858888f19350505050158015610673573d6000803e3d6000fd5b5060405181815233907f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b659060200160405180910390a250565b606073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663550fcdc96040518163ffffffff1660e01b8152600401600060405180830381865afa15801561070d573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526107539190810190610964565b6040516020016103629190610a8b565b60006107703384846103ef565b9392505050565b60005b8381101561079257818101518382015260200161077a565b838111156107a1576000848401525b50505050565b60208152600082518060208401526107c6816040850160208701610777565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461081c57600080fd5b919050565b6000806040838503121561083457600080fd5b61083d836107f8565b946020939093013593505050565b60008060006060848603121561086057600080fd5b610869846107f8565b9250610877602085016107f8565b9150604084013590509250925092565b60006020828403121561089957600080fd5b5035919050565b6000602082840312156108b257600080fd5b610770826107f8565b600080604083850312156108ce57600080fd5b6108d7836107f8565b91506108e5602084016107f8565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115610930576109306108ee565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561097657600080fd5b815167ffffffffffffffff8082111561098e57600080fd5b818401915084601f8301126109a257600080fd5b8151818111156109b4576109b4610935565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156109fa576109fa610935565b81604052828152876020848701011115610a1357600080fd5b610a24836020830160208801610777565b979650505050505050565b7f5772617070656420000000000000000000000000000000000000000000000000815260008251610a67816008850160208701610777565b9190910160080192915050565b600082821015610a8657610a866108ee565b500390565b7f5700000000000000000000000000000000000000000000000000000000000000815260008251610ac3816001850160208701610777565b919091016001019291505056fea164736f6c634300080f000a", +} + +// WETHABI is the input ABI used to generate the binding from. +// Deprecated: Use WETHMetaData.ABI instead. +var WETHABI = WETHMetaData.ABI + +// WETHBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use WETHMetaData.Bin instead. +var WETHBin = WETHMetaData.Bin + +// DeployWETH deploys a new Ethereum contract, binding an instance of WETH to it. +func DeployWETH(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *WETH, error) { + parsed, err := WETHMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(WETHBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &WETH{WETHCaller: WETHCaller{contract: contract}, WETHTransactor: WETHTransactor{contract: contract}, WETHFilterer: WETHFilterer{contract: contract}}, nil +} + +// WETH is an auto generated Go binding around an Ethereum contract. +type WETH struct { + WETHCaller // Read-only binding to the contract + WETHTransactor // Write-only binding to the contract + WETHFilterer // Log filterer for contract events +} + +// WETHCaller is an auto generated read-only Go binding around an Ethereum contract. +type WETHCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WETHTransactor is an auto generated write-only Go binding around an Ethereum contract. +type WETHTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WETHFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type WETHFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// WETHSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type WETHSession struct { + Contract *WETH // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WETHCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type WETHCallerSession struct { + Contract *WETHCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// WETHTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type WETHTransactorSession struct { + Contract *WETHTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// WETHRaw is an auto generated low-level Go binding around an Ethereum contract. +type WETHRaw struct { + Contract *WETH // Generic contract binding to access the raw methods on +} + +// WETHCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type WETHCallerRaw struct { + Contract *WETHCaller // Generic read-only contract binding to access the raw methods on +} + +// WETHTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type WETHTransactorRaw struct { + Contract *WETHTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewWETH creates a new instance of WETH, bound to a specific deployed contract. +func NewWETH(address common.Address, backend bind.ContractBackend) (*WETH, error) { + contract, err := bindWETH(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &WETH{WETHCaller: WETHCaller{contract: contract}, WETHTransactor: WETHTransactor{contract: contract}, WETHFilterer: WETHFilterer{contract: contract}}, nil +} + +// NewWETHCaller creates a new read-only instance of WETH, bound to a specific deployed contract. +func NewWETHCaller(address common.Address, caller bind.ContractCaller) (*WETHCaller, error) { + contract, err := bindWETH(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &WETHCaller{contract: contract}, nil +} + +// NewWETHTransactor creates a new write-only instance of WETH, bound to a specific deployed contract. +func NewWETHTransactor(address common.Address, transactor bind.ContractTransactor) (*WETHTransactor, error) { + contract, err := bindWETH(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &WETHTransactor{contract: contract}, nil +} + +// NewWETHFilterer creates a new log filterer instance of WETH, bound to a specific deployed contract. +func NewWETHFilterer(address common.Address, filterer bind.ContractFilterer) (*WETHFilterer, error) { + contract, err := bindWETH(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &WETHFilterer{contract: contract}, nil +} + +// bindWETH binds a generic wrapper to an already deployed contract. +func bindWETH(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(WETHABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WETH *WETHRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WETH.Contract.WETHCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WETH *WETHRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH.Contract.WETHTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WETH *WETHRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WETH.Contract.WETHTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_WETH *WETHCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _WETH.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_WETH *WETHTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_WETH *WETHTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _WETH.Contract.contract.Transact(opts, method, params...) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address , address ) view returns(uint256) +func (_WETH *WETHCaller) Allowance(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (*big.Int, error) { + var out []interface{} + err := _WETH.contract.Call(opts, &out, "allowance", arg0, arg1) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address , address ) view returns(uint256) +func (_WETH *WETHSession) Allowance(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _WETH.Contract.Allowance(&_WETH.CallOpts, arg0, arg1) +} + +// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e. +// +// Solidity: function allowance(address , address ) view returns(uint256) +func (_WETH *WETHCallerSession) Allowance(arg0 common.Address, arg1 common.Address) (*big.Int, error) { + return _WETH.Contract.Allowance(&_WETH.CallOpts, arg0, arg1) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address ) view returns(uint256) +func (_WETH *WETHCaller) BalanceOf(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { + var out []interface{} + err := _WETH.contract.Call(opts, &out, "balanceOf", arg0) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address ) view returns(uint256) +func (_WETH *WETHSession) BalanceOf(arg0 common.Address) (*big.Int, error) { + return _WETH.Contract.BalanceOf(&_WETH.CallOpts, arg0) +} + +// BalanceOf is a free data retrieval call binding the contract method 0x70a08231. +// +// Solidity: function balanceOf(address ) view returns(uint256) +func (_WETH *WETHCallerSession) BalanceOf(arg0 common.Address) (*big.Int, error) { + return _WETH.Contract.BalanceOf(&_WETH.CallOpts, arg0) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_WETH *WETHCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _WETH.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_WETH *WETHSession) Decimals() (uint8, error) { + return _WETH.Contract.Decimals(&_WETH.CallOpts) +} + +// Decimals is a free data retrieval call binding the contract method 0x313ce567. +// +// Solidity: function decimals() view returns(uint8) +func (_WETH *WETHCallerSession) Decimals() (uint8, error) { + return _WETH.Contract.Decimals(&_WETH.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string name_) +func (_WETH *WETHCaller) Name(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _WETH.contract.Call(opts, &out, "name") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string name_) +func (_WETH *WETHSession) Name() (string, error) { + return _WETH.Contract.Name(&_WETH.CallOpts) +} + +// Name is a free data retrieval call binding the contract method 0x06fdde03. +// +// Solidity: function name() view returns(string name_) +func (_WETH *WETHCallerSession) Name() (string, error) { + return _WETH.Contract.Name(&_WETH.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string symbol_) +func (_WETH *WETHCaller) Symbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _WETH.contract.Call(opts, &out, "symbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string symbol_) +func (_WETH *WETHSession) Symbol() (string, error) { + return _WETH.Contract.Symbol(&_WETH.CallOpts) +} + +// Symbol is a free data retrieval call binding the contract method 0x95d89b41. +// +// Solidity: function symbol() view returns(string symbol_) +func (_WETH *WETHCallerSession) Symbol() (string, error) { + return _WETH.Contract.Symbol(&_WETH.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_WETH *WETHCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _WETH.contract.Call(opts, &out, "totalSupply") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_WETH *WETHSession) TotalSupply() (*big.Int, error) { + return _WETH.Contract.TotalSupply(&_WETH.CallOpts) +} + +// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd. +// +// Solidity: function totalSupply() view returns(uint256) +func (_WETH *WETHCallerSession) TotalSupply() (*big.Int, error) { + return _WETH.Contract.TotalSupply(&_WETH.CallOpts) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address guy, uint256 wad) returns(bool) +func (_WETH *WETHTransactor) Approve(opts *bind.TransactOpts, guy common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH.contract.Transact(opts, "approve", guy, wad) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address guy, uint256 wad) returns(bool) +func (_WETH *WETHSession) Approve(guy common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH.Contract.Approve(&_WETH.TransactOpts, guy, wad) +} + +// Approve is a paid mutator transaction binding the contract method 0x095ea7b3. +// +// Solidity: function approve(address guy, uint256 wad) returns(bool) +func (_WETH *WETHTransactorSession) Approve(guy common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH.Contract.Approve(&_WETH.TransactOpts, guy, wad) +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_WETH *WETHTransactor) Deposit(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH.contract.Transact(opts, "deposit") +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_WETH *WETHSession) Deposit() (*types.Transaction, error) { + return _WETH.Contract.Deposit(&_WETH.TransactOpts) +} + +// Deposit is a paid mutator transaction binding the contract method 0xd0e30db0. +// +// Solidity: function deposit() payable returns() +func (_WETH *WETHTransactorSession) Deposit() (*types.Transaction, error) { + return _WETH.Contract.Deposit(&_WETH.TransactOpts) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address dst, uint256 wad) returns(bool) +func (_WETH *WETHTransactor) Transfer(opts *bind.TransactOpts, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH.contract.Transact(opts, "transfer", dst, wad) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address dst, uint256 wad) returns(bool) +func (_WETH *WETHSession) Transfer(dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH.Contract.Transfer(&_WETH.TransactOpts, dst, wad) +} + +// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb. +// +// Solidity: function transfer(address dst, uint256 wad) returns(bool) +func (_WETH *WETHTransactorSession) Transfer(dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH.Contract.Transfer(&_WETH.TransactOpts, dst, wad) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address src, address dst, uint256 wad) returns(bool) +func (_WETH *WETHTransactor) TransferFrom(opts *bind.TransactOpts, src common.Address, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH.contract.Transact(opts, "transferFrom", src, dst, wad) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address src, address dst, uint256 wad) returns(bool) +func (_WETH *WETHSession) TransferFrom(src common.Address, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH.Contract.TransferFrom(&_WETH.TransactOpts, src, dst, wad) +} + +// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd. +// +// Solidity: function transferFrom(address src, address dst, uint256 wad) returns(bool) +func (_WETH *WETHTransactorSession) TransferFrom(src common.Address, dst common.Address, wad *big.Int) (*types.Transaction, error) { + return _WETH.Contract.TransferFrom(&_WETH.TransactOpts, src, dst, wad) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 wad) returns() +func (_WETH *WETHTransactor) Withdraw(opts *bind.TransactOpts, wad *big.Int) (*types.Transaction, error) { + return _WETH.contract.Transact(opts, "withdraw", wad) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 wad) returns() +func (_WETH *WETHSession) Withdraw(wad *big.Int) (*types.Transaction, error) { + return _WETH.Contract.Withdraw(&_WETH.TransactOpts, wad) +} + +// Withdraw is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 wad) returns() +func (_WETH *WETHTransactorSession) Withdraw(wad *big.Int) (*types.Transaction, error) { + return _WETH.Contract.Withdraw(&_WETH.TransactOpts, wad) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WETH *WETHTransactor) Fallback(opts *bind.TransactOpts, calldata []byte) (*types.Transaction, error) { + return _WETH.contract.RawTransact(opts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WETH *WETHSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WETH.Contract.Fallback(&_WETH.TransactOpts, calldata) +} + +// Fallback is a paid mutator transaction binding the contract fallback function. +// +// Solidity: fallback() payable returns() +func (_WETH *WETHTransactorSession) Fallback(calldata []byte) (*types.Transaction, error) { + return _WETH.Contract.Fallback(&_WETH.TransactOpts, calldata) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WETH *WETHTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _WETH.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WETH *WETHSession) Receive() (*types.Transaction, error) { + return _WETH.Contract.Receive(&_WETH.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_WETH *WETHTransactorSession) Receive() (*types.Transaction, error) { + return _WETH.Contract.Receive(&_WETH.TransactOpts) +} + +// WETHApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the WETH contract. +type WETHApprovalIterator struct { + Event *WETHApproval // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WETHApprovalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETHApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WETHApproval) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WETHApprovalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WETHApprovalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WETHApproval represents a Approval event raised by the WETH contract. +type WETHApproval struct { + Src common.Address + Guy common.Address + Wad *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed src, address indexed guy, uint256 wad) +func (_WETH *WETHFilterer) FilterApproval(opts *bind.FilterOpts, src []common.Address, guy []common.Address) (*WETHApprovalIterator, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var guyRule []interface{} + for _, guyItem := range guy { + guyRule = append(guyRule, guyItem) + } + + logs, sub, err := _WETH.contract.FilterLogs(opts, "Approval", srcRule, guyRule) + if err != nil { + return nil, err + } + return &WETHApprovalIterator{contract: _WETH.contract, event: "Approval", logs: logs, sub: sub}, nil +} + +// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed src, address indexed guy, uint256 wad) +func (_WETH *WETHFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *WETHApproval, src []common.Address, guy []common.Address) (event.Subscription, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var guyRule []interface{} + for _, guyItem := range guy { + guyRule = append(guyRule, guyItem) + } + + logs, sub, err := _WETH.contract.WatchLogs(opts, "Approval", srcRule, guyRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WETHApproval) + if err := _WETH.contract.UnpackLog(event, "Approval", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925. +// +// Solidity: event Approval(address indexed src, address indexed guy, uint256 wad) +func (_WETH *WETHFilterer) ParseApproval(log types.Log) (*WETHApproval, error) { + event := new(WETHApproval) + if err := _WETH.contract.UnpackLog(event, "Approval", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WETHDepositIterator is returned from FilterDeposit and is used to iterate over the raw logs and unpacked data for Deposit events raised by the WETH contract. +type WETHDepositIterator struct { + Event *WETHDeposit // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WETHDepositIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETHDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WETHDeposit) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WETHDepositIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WETHDepositIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WETHDeposit represents a Deposit event raised by the WETH contract. +type WETHDeposit struct { + Dst common.Address + Wad *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeposit is a free log retrieval operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed dst, uint256 wad) +func (_WETH *WETHFilterer) FilterDeposit(opts *bind.FilterOpts, dst []common.Address) (*WETHDepositIterator, error) { + + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH.contract.FilterLogs(opts, "Deposit", dstRule) + if err != nil { + return nil, err + } + return &WETHDepositIterator{contract: _WETH.contract, event: "Deposit", logs: logs, sub: sub}, nil +} + +// WatchDeposit is a free log subscription operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed dst, uint256 wad) +func (_WETH *WETHFilterer) WatchDeposit(opts *bind.WatchOpts, sink chan<- *WETHDeposit, dst []common.Address) (event.Subscription, error) { + + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH.contract.WatchLogs(opts, "Deposit", dstRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WETHDeposit) + if err := _WETH.contract.UnpackLog(event, "Deposit", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseDeposit is a log parse operation binding the contract event 0xe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c. +// +// Solidity: event Deposit(address indexed dst, uint256 wad) +func (_WETH *WETHFilterer) ParseDeposit(log types.Log) (*WETHDeposit, error) { + event := new(WETHDeposit) + if err := _WETH.contract.UnpackLog(event, "Deposit", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WETHTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the WETH contract. +type WETHTransferIterator struct { + Event *WETHTransfer // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WETHTransferIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETHTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WETHTransfer) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WETHTransferIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WETHTransferIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WETHTransfer represents a Transfer event raised by the WETH contract. +type WETHTransfer struct { + Src common.Address + Dst common.Address + Wad *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed src, address indexed dst, uint256 wad) +func (_WETH *WETHFilterer) FilterTransfer(opts *bind.FilterOpts, src []common.Address, dst []common.Address) (*WETHTransferIterator, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH.contract.FilterLogs(opts, "Transfer", srcRule, dstRule) + if err != nil { + return nil, err + } + return &WETHTransferIterator{contract: _WETH.contract, event: "Transfer", logs: logs, sub: sub}, nil +} + +// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed src, address indexed dst, uint256 wad) +func (_WETH *WETHFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *WETHTransfer, src []common.Address, dst []common.Address) (event.Subscription, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + var dstRule []interface{} + for _, dstItem := range dst { + dstRule = append(dstRule, dstItem) + } + + logs, sub, err := _WETH.contract.WatchLogs(opts, "Transfer", srcRule, dstRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WETHTransfer) + if err := _WETH.contract.UnpackLog(event, "Transfer", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef. +// +// Solidity: event Transfer(address indexed src, address indexed dst, uint256 wad) +func (_WETH *WETHFilterer) ParseTransfer(log types.Log) (*WETHTransfer, error) { + event := new(WETHTransfer) + if err := _WETH.contract.UnpackLog(event, "Transfer", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// WETHWithdrawalIterator is returned from FilterWithdrawal and is used to iterate over the raw logs and unpacked data for Withdrawal events raised by the WETH contract. +type WETHWithdrawalIterator struct { + Event *WETHWithdrawal // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *WETHWithdrawalIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(WETHWithdrawal) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(WETHWithdrawal) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *WETHWithdrawalIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *WETHWithdrawalIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// WETHWithdrawal represents a Withdrawal event raised by the WETH contract. +type WETHWithdrawal struct { + Src common.Address + Wad *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawal is a free log retrieval operation binding the contract event 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65. +// +// Solidity: event Withdrawal(address indexed src, uint256 wad) +func (_WETH *WETHFilterer) FilterWithdrawal(opts *bind.FilterOpts, src []common.Address) (*WETHWithdrawalIterator, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + + logs, sub, err := _WETH.contract.FilterLogs(opts, "Withdrawal", srcRule) + if err != nil { + return nil, err + } + return &WETHWithdrawalIterator{contract: _WETH.contract, event: "Withdrawal", logs: logs, sub: sub}, nil +} + +// WatchWithdrawal is a free log subscription operation binding the contract event 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65. +// +// Solidity: event Withdrawal(address indexed src, uint256 wad) +func (_WETH *WETHFilterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *WETHWithdrawal, src []common.Address) (event.Subscription, error) { + + var srcRule []interface{} + for _, srcItem := range src { + srcRule = append(srcRule, srcItem) + } + + logs, sub, err := _WETH.contract.WatchLogs(opts, "Withdrawal", srcRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(WETHWithdrawal) + if err := _WETH.contract.UnpackLog(event, "Withdrawal", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawal is a log parse operation binding the contract event 0x7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b65. +// +// Solidity: event Withdrawal(address indexed src, uint256 wad) +func (_WETH *WETHFilterer) ParseWithdrawal(log types.Log) (*WETHWithdrawal, error) { + event := new(WETHWithdrawal) + if err := _WETH.contract.UnpackLog(event, "Withdrawal", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-bindings/predeploys/addresses.go b/op-bindings/predeploys/addresses.go index 6d1b75e3bf4..045a50413bc 100644 --- a/op-bindings/predeploys/addresses.go +++ b/op-bindings/predeploys/addresses.go @@ -8,7 +8,7 @@ import "github.com/ethereum/go-ethereum/common" const ( L2ToL1MessagePasser = "0x4200000000000000000000000000000000000016" DeployerWhitelist = "0x4200000000000000000000000000000000000002" - WETH9 = "0x4200000000000000000000000000000000000006" + WETH = "0x4200000000000000000000000000000000000006" L2CrossDomainMessenger = "0x4200000000000000000000000000000000000007" L2StandardBridge = "0x4200000000000000000000000000000000000010" SequencerFeeVault = "0x4200000000000000000000000000000000000011" @@ -41,7 +41,7 @@ const ( var ( L2ToL1MessagePasserAddr = common.HexToAddress(L2ToL1MessagePasser) DeployerWhitelistAddr = common.HexToAddress(DeployerWhitelist) - WETH9Addr = common.HexToAddress(WETH9) + WETHAddr = common.HexToAddress(WETH) L2CrossDomainMessengerAddr = common.HexToAddress(L2CrossDomainMessenger) L2StandardBridgeAddr = common.HexToAddress(L2StandardBridge) SequencerFeeVaultAddr = common.HexToAddress(SequencerFeeVault) @@ -77,7 +77,7 @@ var ( func init() { Predeploys["L2ToL1MessagePasser"] = &Predeploy{Address: L2ToL1MessagePasserAddr} Predeploys["DeployerWhitelist"] = &Predeploy{Address: DeployerWhitelistAddr} - Predeploys["WETH9"] = &Predeploy{Address: WETH9Addr, ProxyDisabled: true} + Predeploys["WETH"] = &Predeploy{Address: WETHAddr, ProxyDisabled: true} Predeploys["L2CrossDomainMessenger"] = &Predeploy{Address: L2CrossDomainMessengerAddr} Predeploys["L2StandardBridge"] = &Predeploy{Address: L2StandardBridgeAddr} Predeploys["SequencerFeeVault"] = &Predeploy{Address: SequencerFeeVaultAddr} From e4cd841545e4e8c985f9aa729aba5f7caf787b00 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 16:28:34 -0600 Subject: [PATCH 07/45] op-chain-ops: fixup tests Co-authored-by: Diego <105765223+0xfuturistic@users.noreply.github.com> --- op-chain-ops/genesis/config.go | 11 +++++++++- .../testdata/test-deploy-config-full.json | 2 ++ op-e2e/bridge_test.go | 20 +++++++++---------- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/op-chain-ops/genesis/config.go b/op-chain-ops/genesis/config.go index 608133931d3..db02cbed2ec 100644 --- a/op-chain-ops/genesis/config.go +++ b/op-chain-ops/genesis/config.go @@ -248,7 +248,10 @@ type DeployConfig struct { // UseFaultProofs is a flag that indicates if the system is using fault // proofs instead of the older output oracle mechanism. UseFaultProofs bool `json:"useFaultProofs"` - + // UseCustomGasToken is a flag to indicate that a custom gas token should be used + UseCustomGasToken bool `json:"useCustomGasToken"` + // CustomGasTokenAddress is the address of the ERC20 token to be used to pay for gas on L2. + CustomGasTokenAddress common.Address `json:"customGasTokenAddress"` // UsePlasma is a flag that indicates if the system is using op-plasma UsePlasma bool `json:"usePlasma"` // DAChallengeWindow represents the block interval during which the availability of a data commitment can be challenged. @@ -427,6 +430,12 @@ func (d *DeployConfig) Check() error { return fmt.Errorf("%w: DAResolveWindow cannot be 0 when using plasma mode", ErrInvalidDeployConfig) } } + if d.UseCustomGasToken { + if d.CustomGasTokenAddress == (common.Address{}) { + return fmt.Errorf("%w: CustomGasTokenAddress cannot be address(0)", ErrInvalidDeployConfig) + } + log.Info("Using custom gas token", "address", d.CustomGasTokenAddress) + } // checkFork checks that fork A is before or at the same time as fork B checkFork := func(a, b *hexutil.Uint64, aName, bName string) error { if a == nil && b == nil { diff --git a/op-chain-ops/genesis/testdata/test-deploy-config-full.json b/op-chain-ops/genesis/testdata/test-deploy-config-full.json index 1ae5e64097e..ffaf7c4c841 100644 --- a/op-chain-ops/genesis/testdata/test-deploy-config-full.json +++ b/op-chain-ops/genesis/testdata/test-deploy-config-full.json @@ -8,6 +8,7 @@ "channelTimeout": 30, "l1UseClique": false, "cliqueSignerAddress": "0x0000000000000000000000000000000000000000", + "customGasTokenAddress": "0x0000000000000000000000000000000000000000", "p2pSequencerAddress": "0x9965507d1a55bcc2695c58ba16fb37d819b0a4dc", "batchInboxAddress": "0x42000000000000000000000000000000000000ff", "batchSenderAddress": "0x3c44cdddb6a900fa2b585dd299e03d12fa4293bc", @@ -83,6 +84,7 @@ "proofMaturityDelaySeconds": 12, "disputeGameFinalityDelaySeconds": 6, "respectedGameType": 0, + "useCustomGasToken": false, "useFaultProofs": false, "usePlasma": false, "daBondSize": 0, diff --git a/op-e2e/bridge_test.go b/op-e2e/bridge_test.go index c3e629e5a01..a21efbb39d0 100644 --- a/op-e2e/bridge_test.go +++ b/op-e2e/bridge_test.go @@ -40,29 +40,29 @@ func TestERC20BridgeDeposits(t *testing.T) { opts, err := bind.NewKeyedTransactorWithChainID(sys.Cfg.Secrets.Alice, cfg.L1ChainIDBig()) require.Nil(t, err) - // Deploy WETH9 - weth9Address, tx, WETH9, err := bindings.DeployWETH9(opts, l1Client) + // Deploy WETH + wethAddress, tx, WETH, err := bindings.DeployWETH(opts, l1Client) require.NoError(t, err) _, err = wait.ForReceiptOK(context.Background(), l1Client, tx.Hash()) require.NoError(t, err, "Waiting for deposit tx on L1") // Get some WETH opts.Value = big.NewInt(params.Ether) - tx, err = WETH9.Deposit(opts) + tx, err = WETH.Deposit(opts) require.NoError(t, err) _, err = wait.ForReceiptOK(context.Background(), l1Client, tx.Hash()) require.NoError(t, err) opts.Value = nil - wethBalance, err := WETH9.BalanceOf(&bind.CallOpts{}, opts.From) + wethBalance, err := WETH.BalanceOf(&bind.CallOpts{}, opts.From) require.NoError(t, err) require.Equal(t, big.NewInt(params.Ether), wethBalance) - // Deploy L2 WETH9 + // Deploy L2 WETH l2Opts, err := bind.NewKeyedTransactorWithChainID(sys.Cfg.Secrets.Alice, cfg.L2ChainIDBig()) require.NoError(t, err) optimismMintableTokenFactory, err := bindings.NewOptimismMintableERC20Factory(predeploys.OptimismMintableERC20FactoryAddr, l2Client) require.NoError(t, err) - tx, err = optimismMintableTokenFactory.CreateOptimismMintableERC20(l2Opts, weth9Address, "L2-WETH", "L2-WETH") + tx, err = optimismMintableTokenFactory.CreateOptimismMintableERC20(l2Opts, wethAddress, "L2-WETH", "L2-WETH") require.NoError(t, err) rcpt, err := wait.ForReceiptOK(context.Background(), l2Client, tx.Hash()) require.NoError(t, err) @@ -70,17 +70,17 @@ func TestERC20BridgeDeposits(t *testing.T) { event, err := receipts.FindLog(rcpt.Logs, optimismMintableTokenFactory.ParseOptimismMintableERC20Created) require.NoError(t, err, "Should emit ERC20Created event") - // Approve WETH9 with the bridge - tx, err = WETH9.Approve(opts, cfg.L1Deployments.L1StandardBridgeProxy, new(big.Int).SetUint64(math.MaxUint64)) + // Approve WETH with the bridge + tx, err = WETH.Approve(opts, cfg.L1Deployments.L1StandardBridgeProxy, new(big.Int).SetUint64(math.MaxUint64)) require.NoError(t, err) _, err = wait.ForReceiptOK(context.Background(), l1Client, tx.Hash()) require.NoError(t, err) - // Bridge the WETH9 + // Bridge the WETH l1StandardBridge, err := bindings.NewL1StandardBridge(cfg.L1Deployments.L1StandardBridgeProxy, l1Client) require.NoError(t, err) tx, err = transactions.PadGasEstimate(opts, 1.1, func(opts *bind.TransactOpts) (*types.Transaction, error) { - return l1StandardBridge.BridgeERC20(opts, weth9Address, event.LocalToken, big.NewInt(100), 100000, []byte{}) + return l1StandardBridge.BridgeERC20(opts, wethAddress, event.LocalToken, big.NewInt(100), 100000, []byte{}) }) require.NoError(t, err) depositReceipt, err := wait.ForReceiptOK(context.Background(), l1Client, tx.Hash()) From e53471de2481e71eef905e93328cbc657df66859 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 16:28:56 -0600 Subject: [PATCH 08/45] contracts-bedrock: snapshots Update snapshots Co-authored-by: Diego <105765223+0xfuturistic@users.noreply.github.com> --- packages/contracts-bedrock/.gas-snapshot | 22 +++++++------- .../invariant-docs/SystemConfig.md | 2 +- packages/contracts-bedrock/semver-lock.json | 30 +++++++++---------- 3 files changed, 27 insertions(+), 27 deletions(-) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 6351108c903..cee1e5a1c5d 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -1,11 +1,11 @@ -GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 356538) -GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2954723) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 549153) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4061129) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 450282) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3496031) -GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 59809) -GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 92950) -GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 68354) -GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 69018) -GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 155567) \ No newline at end of file +GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 369376) +GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2967583) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 561991) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4073967) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 466919) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3512668) +GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 72650) +GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 92973) +GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 68431) +GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 68923) +GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 155523) \ No newline at end of file diff --git a/packages/contracts-bedrock/invariant-docs/SystemConfig.md b/packages/contracts-bedrock/invariant-docs/SystemConfig.md index 382bb3d539d..757a0e25b09 100644 --- a/packages/contracts-bedrock/invariant-docs/SystemConfig.md +++ b/packages/contracts-bedrock/invariant-docs/SystemConfig.md @@ -1,5 +1,5 @@ # `SystemConfig` Invariants ## The gas limit of the `SystemConfig` contract can never be lower than the hard-coded lower bound. -**Test:** [`SystemConfig.t.sol#L68`](../test/invariants/SystemConfig.t.sol#L68) +**Test:** [`SystemConfig.t.sol#L69`](../test/invariants/SystemConfig.t.sol#L69) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 1a8eb86a22c..b0590fe43e4 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,24 +16,24 @@ "sourceCodeHash": "0xc59b8574531162e016d7342aeb6e79d05574e90dbea6c0e5ede35b65010ad894" }, "src/L1/L1CrossDomainMessenger.sol": { - "initCodeHash": "0xb0b3273999191e4ff616509e3a368a9d89f7967c20ba73c1bc5bd72bd13acb16", - "sourceCodeHash": "0x6c86ba9f20f54ac834ad846e6302f892b7576dd407db595ebaba017971471eb4" + "initCodeHash": "0x8f99a4f81ed307b4aebd63c5576e2a546df6259a5c25d4f7e3e875cda9efaab3", + "sourceCodeHash": "0x9eb2d966cf3d2d13920d2416fea2f418d34e2b000cc4e400c8b43634cdaa1188" }, "src/L1/L1ERC721Bridge.sol": { "initCodeHash": "0xec73b46e68ea29298707f7b9709e7948afe303907b6c4e8b161e2ded2c85ee9c", "sourceCodeHash": "0xd57acdbd001941e75cf4326ba7c1bdad809912f10b1e44ffaebe073917cdd296" }, "src/L1/L1StandardBridge.sol": { - "initCodeHash": "0xb0166b741e0b6938c004c19de78f347171e2656056a0363434ebd0f34a6a32ca", - "sourceCodeHash": "0x654f9490dd2d0bc9e92dc31781e62f106f6b7d8b6fca0cfe718cd2a599c1b18b" + "initCodeHash": "0x291fba327c66777c7c17e11ac3195acf96d7127ebf2f13fe64170e6aa76bd5e9", + "sourceCodeHash": "0x4869295cb549008e319aea485104554b7957ced67eefb9dd0ddc108314663b7a" }, "src/L1/L2OutputOracle.sol": { "initCodeHash": "0x14c3a582ca46ef2a6abad5590323f4de26ff4de54415c927c62e131ccbf8d9ba", "sourceCodeHash": "0xf5fcf570721e25459fadbb37e02f9efe349e1c8afcbf1e3b5fdb09c9f612cdc0" }, "src/L1/OptimismPortal.sol": { - "initCodeHash": "0xe7aa232aaf0826d0d9129e2fae35979e9d5ad8dbf0d8d23886a5ef851e3f3a81", - "sourceCodeHash": "0xd3450653cecc14bf8fbc21f2fa9b4a5fde348c2b6313d72e74e08666201295a2" + "initCodeHash": "0x9810d3b514550bc32334798bd395c39da9e4108bcd7cc7f89523a139b5f5d619", + "sourceCodeHash": "0x0f9b6996bb51ee9f81a9d8d1c72fbce17d733301955c985a0b643677df059fcb" }, "src/L1/OptimismPortal2.sol": { "initCodeHash": "0xea32d79e8297956d4f9a4c7985bb53ff8bb3735e5b307d4e118fea71f503a38e", @@ -48,8 +48,8 @@ "sourceCodeHash": "0xd6a894e371c2c7182b5960c507491f81c3775dda0efedd29475f7c30ca07b004" }, "src/L1/SystemConfig.sol": { - "initCodeHash": "0xa7419d85404d5ea842025ad8fdffb7a0edbb80ef3e6e454b593d50e6bb0ca6e4", - "sourceCodeHash": "0xb29beac61b1f4d0ac7ef0f2b3201eb19b5e6f0c1c2b08892268f38fcb4166066" + "initCodeHash": "0xeb5004fdb42512bdb43698f2c3c30f51dec8906c9823dc13e6b29fa875109d86", + "sourceCodeHash": "0x4dbcf7367d0f8afda54b9430a9f0fcac63fb9b57d87fa1b7ac2de28327e3ef0b" }, "src/L2/BaseFeeVault.sol": { "initCodeHash": "0x2744d34573be83206d1b75d049d18a7bb37f9058e68c0803e5008c46b0dc2474", @@ -64,11 +64,11 @@ "sourceCodeHash": "0xde06becce9514f46ba78b4cb0732c7a714d49ba8f131258d56a5f5b22b51be7e" }, "src/L2/L1Block.sol": { - "initCodeHash": "0x42d17698899f06e6cf38823bea3dbaff32ba32ebcb2974f928f93d005a3ea91b", - "sourceCodeHash": "0x723fb55d63110783697aa8e9bba017c267b9e0a24639ec684d3147e47b68ae28" + "initCodeHash": "0x6203eea328565c2dff822ce3d5fd0f3cf0aaba214b8e19e319ceca728f731d57", + "sourceCodeHash": "0xa65847a37654347237402e46d8c15afa82cd61d826547bc0f272e2c1b477ea7f" }, "src/L2/L1BlockInterop.sol": { - "initCodeHash": "0xddac768887de4053c8e8b92bc9bc621c9bb31df90018be4308dd4e21b1b1085f", + "initCodeHash": "0xa195d3d0fc6cd8259a512c638c8e46aec1c01c24a46e6b695c47fdf66b1c3fda", "sourceCodeHash": "0xc93a12fbf00ace5f92051f4a57bb3584b5b773c33fd3c40be771c3b4fbf878e9" }, "src/L2/L1FeeVault.sol": { @@ -76,16 +76,16 @@ "sourceCodeHash": "0x3a94f273937d8908fb37dd2c495a6a0b9c3941fe68ccea51723f84eb343ba225" }, "src/L2/L2CrossDomainMessenger.sol": { - "initCodeHash": "0xfeedd51cc3159f814f6aee9e54cbba1c9a2fa4079fa40c00871889bc1c98c902", - "sourceCodeHash": "0x9993c85445b4a00153d7bbfb8259d920d0b1b6c9fd557c65ad8df47119e55275" + "initCodeHash": "0xbe8c8618552d14db92b0697d8e79c7ddb5a7563b9604723fbf059d15ed5d1067", + "sourceCodeHash": "0x84a5e7f511c3e714d3c1c8654be5394f9277ed84f8f2c3771eb1e7cb18c48ddc" }, "src/L2/L2ERC721Bridge.sol": { "initCodeHash": "0xcafa012b2d8f1bb05c11cbbff9749c0fe6f995c9afb1d26d2d71f03384e34a22", "sourceCodeHash": "0xa7646a588275046f92525ef121e5a0fe149e7752ea51fe62f7e0686a21153542" }, "src/L2/L2StandardBridge.sol": { - "initCodeHash": "0xe16aed4fc021c768d0ebcb8bb83db7cfe6b062663d034df9f351cdc6af2e5077", - "sourceCodeHash": "0xc86e370a8cd1277b203d18df154a50aed16b27156b755e6bd6672d068d44b9f2" + "initCodeHash": "0xfd7b94f29ddf98b8f5f84064ca1fb1a95f27f09166278e363627e22b11a856d8", + "sourceCodeHash": "0x160c3fff5b398cee8396c62b370ffcf2fab00859cd52f59001480602ed049a2c" }, "src/L2/L2ToL1MessagePasser.sol": { "initCodeHash": "0x08bbede75cd6dfd076903b8f04d24f82fa7881576c135825098778632e37eebc", From 82bec65e67bd56129da19eb760f9b6ccf1aa5bfa Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 16:49:23 -0600 Subject: [PATCH 09/45] cleanup: get tests passing --- .../contracts-bedrock/invariant-docs/CrossDomainMessenger.md | 4 ++-- .../contracts-bedrock/test/libraries/GasPayingToken.t.sol | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/contracts-bedrock/invariant-docs/CrossDomainMessenger.md b/packages/contracts-bedrock/invariant-docs/CrossDomainMessenger.md index 4329859f24a..1f63feb32c9 100644 --- a/packages/contracts-bedrock/invariant-docs/CrossDomainMessenger.md +++ b/packages/contracts-bedrock/invariant-docs/CrossDomainMessenger.md @@ -1,14 +1,14 @@ # `CrossDomainMessenger` Invariants ## A call to `relayMessage` should succeed if at least the minimum gas limit can be supplied to the target context, there is enough gas to complete execution of `relayMessage` after the target context's execution is finished, and the target context did not revert. -**Test:** [`CrossDomainMessenger.t.sol#L143`](../test/invariants/CrossDomainMessenger.t.sol#L143) +**Test:** [`CrossDomainMessenger.t.sol#L145`](../test/invariants/CrossDomainMessenger.t.sol#L145) There are two minimum gas limits here: - The outer min gas limit is for the call from the `OptimismPortal` to the `L1CrossDomainMessenger`, and it can be retrieved by calling the xdm's `baseGas` function with the `message` and inner limit. - The inner min gas limit is for the call from the `L1CrossDomainMessenger` to the target contract. ## A call to `relayMessage` should assign the message hash to the `failedMessages` mapping if not enough gas is supplied to forward `minGasLimit` to the target context or if there is not enough gas to complete execution of `relayMessage` after the target context's execution is finished. -**Test:** [`CrossDomainMessenger.t.sol#L176`](../test/invariants/CrossDomainMessenger.t.sol#L176) +**Test:** [`CrossDomainMessenger.t.sol#L178`](../test/invariants/CrossDomainMessenger.t.sol#L178) There are two minimum gas limits here: - The outer min gas limit is for the call from the `OptimismPortal` to the `L1CrossDomainMessenger`, and it can be retrieved by calling the xdm's `baseGas` function with the `message` and inner limit. diff --git a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol index 6adbc91faf0..790bb96bcb1 100644 --- a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol +++ b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol @@ -65,6 +65,7 @@ contract GasPayingToken_Roundtrip_Test is Test { vm.assume(_token != address(0)); vm.assume(bytes(_name).length <= 32); vm.assume(bytes(_symbol).length <= 32); + vm.assume(_token != Constants.ETHER); GasPayingToken.set(_token, _decimals, GasPayingToken.sanitize(_name), GasPayingToken.sanitize(_symbol)); From 4d3e0a06be15c677b7ae4535d4c5507b285a7f9f Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 17:39:42 -0600 Subject: [PATCH 10/45] contracts-bedrock: cleanup tests --- .../contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol | 5 +++-- .../contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol | 2 +- .../contracts-bedrock/test/libraries/GasPayingToken.t.sol | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol index 2d3f2795bb2..b4a5a5c4b42 100644 --- a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol @@ -751,19 +751,20 @@ contract L1CrossDomainMessenger_Test is Bridge_Initializer { } /// @dev Tests that the relayMessage reverts when call value is non-zero with custom gas token. + /// The L2CrossDomainMessenger contract cannot `sendMessage` with value when using a custom gas token. function test_relayMessage_customGasToken_withValue_reverts() external virtual { // Mock the gasPayingToken function to return a custom gas token vm.mockCall( address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) ); assertTrue(l1CrossDomainMessenger.isCustomGasToken()); - vm.expectRevert("CrossDomainMessenger: cannot relay value with custom gas token"); + vm.expectRevert("CrossDomainMessenger: value must be zero unless message is from a system address"); l1CrossDomainMessenger.relayMessage{ value: 1 }( Encoding.encodeVersionedNonce({ _nonce: 0, _version: 1 }), address(0xabcd), address(0xabcd), - 0, // value + 1, // value 0, hex"1111" ); diff --git a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol index a57e3e0dce5..4c745905954 100644 --- a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol @@ -304,7 +304,7 @@ contract L2CrossDomainMessenger_Test is Bridge_Initializer { vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); assertTrue(l2CrossDomainMessenger.isCustomGasToken()); - vm.expectRevert("CrossDomainMessenger: cannot send value with custom gas token"); + vm.expectRevert("CrossDomainMessenger: value must be zero unless message is from a system address"); l2CrossDomainMessenger.sendMessage{ value: 1 }(recipient, hex"ff", uint32(100)); } diff --git a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol index 790bb96bcb1..1a8444cfe33 100644 --- a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol +++ b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol @@ -41,6 +41,7 @@ contract GasPayingToken_Roundtrip_Test is Test { /// @dev Test that the gas paying token correctly gets values from storage when set. function testFuzz_get_nonEmpty_succeeds(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) external { vm.assume(_token != address(0)); + vm.assume(_token != Constants.ETHER); GasPayingToken.set(_token, _decimals, _name, _symbol); From 3f77d75e2a4ff5180daa34b62896b4264301b3f3 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 18:27:06 -0600 Subject: [PATCH 11/45] contracts-bedrock: cleanup custom gas token --- packages/contracts-bedrock/semver-lock.json | 4 +- .../snapshots/state-diff/Kontrol-Deploy.json | 118 +++++++++--------- .../src/L1/OptimismPortal.sol | 57 ++++----- .../test/L2/L2CrossDomainMessenger.t.sol | 7 +- .../proofs/utils/DeploymentSummary.sol | 4 +- .../proofs/utils/DeploymentSummaryCode.sol | 2 +- 6 files changed, 93 insertions(+), 99 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index b0590fe43e4..29f699044b4 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -32,8 +32,8 @@ "sourceCodeHash": "0xf5fcf570721e25459fadbb37e02f9efe349e1c8afcbf1e3b5fdb09c9f612cdc0" }, "src/L1/OptimismPortal.sol": { - "initCodeHash": "0x9810d3b514550bc32334798bd395c39da9e4108bcd7cc7f89523a139b5f5d619", - "sourceCodeHash": "0x0f9b6996bb51ee9f81a9d8d1c72fbce17d733301955c985a0b643677df059fcb" + "initCodeHash": "0x1e68f50033778575dd8a35332e7090b6597d12ad6a40efe7011c89e5a590fa8f", + "sourceCodeHash": "0xfb01516c1bd1087834795f494e5b99ac9c397b4198692663098b67979a208ee1" }, "src/L1/OptimismPortal2.sol": { "initCodeHash": "0xea32d79e8297956d4f9a4c7985bb53ff8bb3735e5b307d4e118fea71f503a38e", diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json index 0b5beb2a9be..5b0fdf6bcb4 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json @@ -3314,7 +3314,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b620020971760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616011806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615431565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b6366004615565565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156b7565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156ca565b611089565b34801561036257600080fd5b506101936103713660046156f2565b611144565b34801561038257600080fd5b50610193610391366004615738565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156ca565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b366004615775565b611dd6565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611def565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615790565b611e49565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156ca565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157db565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120b3565b50610673828261225f565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615858565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c61252c565b6107bd89826158a0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615858565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a0565b909155506108a890508a8a8a8a8a8a6120b3565b50506108b4828261225f565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158b8565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158f2565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a919061592f565b519050610ba4610b9f36869003860186615994565b612608565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d87612664565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061592f565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a6159fa565b8a60400135612694565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a7e565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061592f565b602001516fffffffffffffffffffffffffffffffff166126b8565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a16201388061275e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156b7565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f982612664565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615858565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126b8565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061592f565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126b8565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127ba565b9150611d1f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cf6576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd89190615858565b9050866060015160386000828254611bf09190615b00565b909155505060408701516060880151611c209173ffffffffffffffffffffffffffffffffffffffff851691612818565b6060870151611c2f9082615b00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190615858565b14611cf4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d1a57611acd8660400151876080015160008960a001516127ba565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8190851515815260200190565b60405180910390a281158015611d975750326001145b15611dce576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611de3826010615b17565b61113e90615208615b47565b600080611dfa6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e41574791505090565b505060385490565b600054610100900460ff1615808015611e695750600054600160ff909116105b80611e835750303b158015611e83575060005460ff166001145b611f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61202e612873565b801561209157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120d5575073ffffffffffffffffffffffffffffffffffffffff861615155b1561210c576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121168151611dd6565b67ffffffffffffffff168367ffffffffffffffff161015612163576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a1576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121c2575033731111000000000000000000000000000000001111015b600086868686866040516020016121dd959493929190615a9b565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161224d91906156b7565b60405180910390a45050505050505050565b600154600090612295907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b00565b905060006122a1612986565b90506000816020015160ff16826000015163ffffffff166122c29190615ba2565b905082156123f9576001546000906122f9908390700100000000000000000000000000000000900467ffffffffffffffff16615c0a565b90506000836040015160ff16836123109190615c7e565b6001546123309084906fffffffffffffffffffffffffffffffff16615c7e565b61233a9190615ba2565b60015490915060009061238b906123649084906fffffffffffffffffffffffffffffffff16615d3a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a47565b905060018611156123ba576123b761236482876040015160ff1660018a6123b29190615b00565b612a66565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061242c908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124b9576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124e5906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615dae565b905060006124f748633b9aca00612abb565b6125019083615deb565b905060005a6125109088615b00565b9050808211156108b4576108b46125278284615b00565b612ad2565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120919085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612afb565b60008160000151826020015183604001518460600151604051602001612647949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612647979096959101615dff565b6000806126a086612c07565b90506126ae81868686612c39565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190615858565b61275690836158a0565b421192915050565b60018054829190601090612791908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127ca866000612c69565b905080612800576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261286e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612586565b505050565b600054610100900460ff1661290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e6a565b6000612a5c612a568585612c87565b83612c97565b90505b9392505050565b6000670de0b6b3a7640000612aa7612a7e8583615ba2565b612a9090670de0b6b3a7640000615c0a565b612aa285670de0b6b3a7640000615c7e565b612ca6565b612ab19086615c7e565b612a5c9190615ba2565b600081831015612acb5781612a5f565b5090919050565b6000805a90505b825a612ae59083615b00565b101561286e57612af482615f0d565b9150612ad9565b6000612b5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cd79092919063ffffffff16565b80519091501561286e5780806020019051810190612b7b9190615a7e565b61286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2391815260200190565b6040516020818303038152906040529050919050565b6000612c6084612c4a878686612ce6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612acb5781612a5f565b6000818312612acb5781612a5f565b6000612a5f670de0b6b3a764000083612cbe86613764565b612cc89190615c7e565b612cd29190615ba2565b6139a8565b6060612a5c8484600085613be7565b60606000845111612d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d5e84613d7d565b90506000612d6b86613e69565b9050600084604051602001612d8291815260200190565b60405160208183030381529060405290506000805b84518110156136db576000858281518110612db457612db4615f45565b602002602001015190508451831115612e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f085780518051602091820120604051612e9d92612e7792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b61305f565b805151602011612fbe5780518051602091820120604051612f3292612e7792910190815260200190565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b80518451602080870191909120825191909201201461305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b61306b601060016158a0565b8160200151510361324757845183036131df576130a5816020015160108151811061309857613098615f45565b6020026020010151613ecc565b96506000875111613138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b600186516131469190615b00565b82146131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a5f565b60008584815181106131f3576131f3615f45565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061321e5761321e615f45565b602002602001015190506132318161402c565b955061323e6001866158a0565b945050506136c8565b60028160200151510361364057600061325f82614051565b905060008160008151811061327657613276615f45565b016020015160f81c9050600061328d600283615f74565b613298906002615f96565b905060006132a9848360ff16614075565b905060006132b78a89614075565b905060006132c583836140ab565b905080835114613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff85166002148061336c575060ff85166003145b1561355b5780825114613401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61341b876020015160018151811061309857613098615f45565b9c5060008d51116134ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134bc9190615b00565b881461354a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a5f565b60ff8516158061356e575060ff85166001145b156135ad5761359a876020015160018151811061358d5761358d615f45565b602002602001015161402c565b99506135a6818a6158a0565b9850613635565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136c8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136d381615f0d565b915050612d97565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137dc8461415f565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139d957506000919050565b680755bf798b4a1bf1e58212613a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d209190615fb9565b60006040518083038185875af1925050503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b5091509150613d72828286614235565b979650505050505050565b80516060908067ffffffffffffffff811115613d9b57613d9b615325565b604051908082528060200260200182016040528015613de057816020015b6040805180820190915260608082526020820152815260200190600190039081613db95790505b50915060005b81811015613e62576040518060400160405280858381518110613e0b57613e0b615f45565b60200260200101518152602001613e3a868481518110613e2d57613e2d615f45565b6020026020010151614288565b815250838281518110613e4f57613e4f615f45565b6020908102919091010152600101613de6565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec1578060011b82018184015160001a8060041c8253600f811660018301535050600101613e93565b509295945050505050565b60606000806000613edc8561429b565b919450925090506000816001811115613ef757613ef7615fd5565b14613f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f8e82846158a0565b85511461401d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6085602001518484614d08565b606060208260000151106140485761404382613ecc565b61113e565b61113e82614d9c565b606061113e614070836020015160008151811061309857613098615f45565b613e69565b606082518210614094575060408051602081019091526000815261113e565b612a5f83838486516140a69190615b00565b614db2565b60008082518451106140be5782516140c1565b83515b90505b808210801561414857508282815181106140e0576140e0615f45565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411f5761411f615f45565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614158578160010191506140c4565b5092915050565b60008082116141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614244575081612a5f565b8251156142545782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156b7565b606061113e61429683614f8a565b615073565b600080600080846000015111614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f811161437e576000600160009450945094505050614d01565b60b7811161458c576000614393608083615b00565b90508087600001511161444e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144c757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d01915050565b60bf81116148da5760006145a160b783615b00565b90508087600001511161465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361473a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c603781116147fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61480881846158a0565b8951116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148c88360016158a0565b9750955060009450614d019350505050565b60f781116149bb5760006148ef60c083615b00565b9050808760000151116149aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d01915050565b60006149c860f783615b00565b905080876000015111614a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c2f81846158a0565b895111614ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cef8360016158a0565b9750955060019450614d019350505050565b9193909250565b60608167ffffffffffffffff811115614d2357614d23615325565b6040519080825280601f01601f191660200182016040528015614d4d576020820181803683370190505b5090508115612a5f576000614d6284866158a0565b90506020820160005b84811015614d83578281015182820152602001614d6b565b84811115614d92576000858301525b5050509392505050565b606061113e826020015160008460000151614d08565b60608182601f011015614e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f195760405191506000825260208201604052614f81565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f52578051835260209283019201614f3a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111615055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b606060008060006150838561429b565b91945092509050600181600181111561509e5761509e615fd5565b1461512b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513783856158a0565b146151c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151db5790505093506000835b86518110156152c95760008061524e6040518060400160405280858c600001516152329190615b00565b8152602001858c6020015161524791906158a0565b905261429b565b50915091506040518060400160405280838361526a91906158a0565b8152602001848b6020015161527f91906158a0565b81525088858151811061529457615294615f45565b60209081029190910101526152aa6001856158a0565b93506152b681836158a0565b6152c090846158a0565b92505050615208565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152f757600080fd5b50565b803567ffffffffffffffff8116811461531257600080fd5b919050565b80151581146152f757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561539b5761539b615325565b604052919050565b600082601f8301126153b457600080fd5b813567ffffffffffffffff8111156153ce576153ce615325565b6153ff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615354565b81815284602083860101111561541457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561544a57600080fd5b8635615455816152d5565b95506020870135945060408701359350615471606088016152fa565b9250608087013561548181615317565b915060a087013567ffffffffffffffff81111561549d57600080fd5b6154a989828a016153a3565b9150509295509295509295565b600060c082840312156154c857600080fd5b60405160c0810167ffffffffffffffff82821081831117156154ec576154ec615325565b816040528293508435835260208501359150615507826152d5565b8160208401526040850135915061551d826152d5565b816040840152606085013560608401526080850135608084015260a085013591508082111561554b57600080fd5b50615558858286016153a3565b60a0830152505092915050565b600080600080600085870360e081121561557e57600080fd5b863567ffffffffffffffff8082111561559657600080fd5b6155a28a838b016154b6565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155db57600080fd5b60408901955060c08901359250808311156155f557600080fd5b828901925089601f84011261560957600080fd5b823591508082111561561a57600080fd5b508860208260051b840101111561563057600080fd5b959894975092955050506020019190565b60005b8381101561565c578181015183820152602001615644565b838111156120915750506000910152565b60008151808452615685816020860160208601615641565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a5f602083018461566d565b6000602082840312156156dc57600080fd5b5035919050565b60ff811681146152f757600080fd5b6000806000806080858703121561570857600080fd5b8435615713816152d5565b93506020850135615723816156e3565b93969395505050506040820135916060013590565b60006020828403121561574a57600080fd5b813567ffffffffffffffff81111561576157600080fd5b61576d848285016154b6565b949350505050565b60006020828403121561578757600080fd5b612a5f826152fa565b6000806000606084860312156157a557600080fd5b83356157b0816152d5565b925060208401356157c0816152d5565b915060408401356157d0816152d5565b809150509250925092565b600080600080600060a086880312156157f357600080fd5b85356157fe816152d5565b945060208601359350615813604087016152fa565b9250606086013561582381615317565b9150608086013567ffffffffffffffff81111561583f57600080fd5b61584b888289016153a3565b9150509295509295909350565b60006020828403121561586a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158b3576158b3615871565b500190565b600080604083850312156158cb57600080fd5b82516158d6816152d5565b60208401519092506158e7816156e3565b809150509250929050565b60006020828403121561590457600080fd5b8151612a5f816152d5565b80516fffffffffffffffffffffffffffffffff8116811461531257600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964615325565b604052825181526159776020840161590f565b60208201526159886040840161590f565b60408201529392505050565b6000608082840312156159a657600080fd5b6040516080810181811067ffffffffffffffff821117156159c9576159c9615325565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1557615a15615325565b8360051b6020615a26818301615354565b868152918501918181019036841115615a3e57600080fd5b865b84811015615a7257803586811115615a585760008081fd5b615a6436828b016153a3565b845250918301918301615a40565b50979650505050505050565b600060208284031215615a9057600080fd5b8151612a5f81615317565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615aef816049850160208701615641565b919091016049019695505050505050565b600082821015615b1257615b12615871565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b3e57615b3e615871565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b6a57615b6a615871565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb157615bb1615b73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0557615c05615871565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4457615c44615871565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c7857615c78615871565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615871565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615871565b60008712925087820587128484161615615d1657615d16615871565b87850587128184161615615d2c57615d2c615871565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7457615d74615871565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615da857615da8615871565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615de657615de6615871565b500290565b600082615dfa57615dfa615b73565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e4a60c083018461566d565b98975050505050505050565b805163ffffffff8116811461531257600080fd5b600060c08284031215615e7c57600080fd5b60405160c0810181811067ffffffffffffffff82111715615e9f57615e9f615325565b604052615eab83615e56565b81526020830151615ebb816156e3565b60208201526040830151615ece816156e3565b6040820152615edf60608401615e56565b6060820152615ef060808401615e56565b6080820152615f0160a0840161590f565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f3e57615f3e615871565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8757615f87615b73565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb057615fb0615871565b90039392505050565b60008251615fcb818460208701615641565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200209f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616019806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615439565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b636600461556d565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156bf565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156d2565b611089565b34801561036257600080fd5b506101936103713660046156fa565b611144565b34801561038257600080fd5b50610193610391366004615740565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156d2565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b36600461577d565b611dde565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611df7565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615798565b611e51565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156d2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157e3565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120bb565b506106738282612267565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615860565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612534565b6107bd89826158a8565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615860565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a8565b909155506108a890508a8a8a8a8a8a6120bb565b50506108b48282612267565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158c0565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158fa565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190615937565b519050610ba4610b9f3686900386018661599c565b612610565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d8761266c565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190615937565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a615a02565b8a6040013561269c565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a86565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190615937565b602001516fffffffffffffffffffffffffffffffff166126c0565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a162013880612766565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615aa3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156bf565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f98261266c565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615860565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126c0565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190615937565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126c0565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127c2565b9150611d27565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cfe57856060015160386000828254611b5d9190615b08565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190615860565b9050611c28876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166128209092919063ffffffff16565b6060870151611c379082615b08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615860565b14611cfc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d2257611acd8660400151876080015160008960a001516127c2565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8990851515815260200190565b60405180910390a281158015611d9f5750326001145b15611dd6576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611deb826010615b1f565b61113e90615208615b4f565b600080611e026108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e49574791505090565b505060385490565b600054610100900460ff1615808015611e715750600054600160ff909116105b80611e8b5750303b158015611e8b575060005460ff166001145b611f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f7557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61203661287b565b801561209957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120dd575073ffffffffffffffffffffffffffffffffffffffff861615155b15612114576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211e8151611dde565b67ffffffffffffffff168367ffffffffffffffff16101561216b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121ca575033731111000000000000000000000000000000001111015b600086868686866040516020016121e5959493929190615aa3565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225591906156bf565b60405180910390a45050505050505050565b60015460009061229d907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b08565b905060006122a961298e565b90506000816020015160ff16826000015163ffffffff166122ca9190615baa565b9050821561240157600154600090612301908390700100000000000000000000000000000000900467ffffffffffffffff16615c12565b90506000836040015160ff16836123189190615c86565b6001546123389084906fffffffffffffffffffffffffffffffff16615c86565b6123429190615baa565b6001549091506000906123939061236c9084906fffffffffffffffffffffffffffffffff16615d42565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a4f565b905060018611156123c2576123bf61236c82876040015160ff1660018a6123ba9190615b08565b612a6e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612434908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124c1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124ed906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615db6565b905060006124ff48633b9aca00612ac3565b6125099083615df3565b905060005a6125189088615b08565b9050808211156108b4576108b461252f8284615b08565b612ada565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120999085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b03565b6000816000015182602001518360400151846060015160405160200161264f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a0880151935160009761264f979096959101615e07565b6000806126a886612c0f565b90506126b681868686612c41565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615860565b61275e90836158a8565b421192915050565b60018054829190601090612799908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127d2866000612c71565b905080612808576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526128769084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161258e565b505050565b600054610100900460ff16612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e72565b6000612a64612a5e8585612c8f565b83612c9f565b90505b9392505050565b6000670de0b6b3a7640000612aaf612a868583615baa565b612a9890670de0b6b3a7640000615c12565b612aaa85670de0b6b3a7640000615c86565b612cae565b612ab99086615c86565b612a649190615baa565b600081831015612ad35781612a67565b5090919050565b6000805a90505b825a612aed9083615b08565b101561287657612afc82615f15565b9150612ae1565b6000612b65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cdf9092919063ffffffff16565b8051909150156128765780806020019051810190612b839190615a86565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2b91815260200190565b6040516020818303038152906040529050919050565b6000612c6884612c52878686612cee565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ad35781612a67565b6000818312612ad35781612a67565b6000612a67670de0b6b3a764000083612cc68661376c565b612cd09190615c86565b612cda9190615baa565b6139b0565b6060612a648484600085613bef565b60606000845111612d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d6684613d85565b90506000612d7386613e71565b9050600084604051602001612d8a91815260200190565b60405160208183030381529060405290506000805b84518110156136e3576000858281518110612dbc57612dbc615f4d565b602002602001015190508451831115612e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f105780518051602091820120604051612ea592612e7f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b613067565b805151602011612fc65780518051602091820120604051612f3a92612e7f92910190815260200190565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b805184516020808701919091208251919092012014613067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b613073601060016158a8565b8160200151510361324f57845183036131e7576130ad81602001516010815181106130a0576130a0615f4d565b6020026020010151613ed4565b96506000875111613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b6001865161314e9190615b08565b82146131dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a67565b60008584815181106131fb576131fb615f4d565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061322657613226615f4d565b6020026020010151905061323981614034565b95506132466001866158a8565b945050506136d0565b60028160200151510361364857600061326782614059565b905060008160008151811061327e5761327e615f4d565b016020015160f81c90506000613295600283615f7c565b6132a0906002615f9e565b905060006132b1848360ff1661407d565b905060006132bf8a8961407d565b905060006132cd83836140b3565b90508083511461335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff851660021480613374575060ff85166003145b156135635780825114613409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61342387602001516001815181106130a0576130a0615f4d565b9c5060008d51116134b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134c49190615b08565b8814613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a67565b60ff85161580613576575060ff85166001145b156135b5576135a2876020015160018151811061359557613595615f4d565b6020026020010151614034565b99506135ae818a6158a8565b985061363d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136d0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136db81615f15565b915050612d9f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137e484614167565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139e157506000919050565b680755bf798b4a1bf1e58212613a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d289190615fc1565b60006040518083038185875af1925050503d8060008114613d65576040519150601f19603f3d011682016040523d82523d6000602084013e613d6a565b606091505b5091509150613d7a82828661423d565b979650505050505050565b80516060908067ffffffffffffffff811115613da357613da361532d565b604051908082528060200260200182016040528015613de857816020015b6040805180820190915260608082526020820152815260200190600190039081613dc15790505b50915060005b81811015613e6a576040518060400160405280858381518110613e1357613e13615f4d565b60200260200101518152602001613e42868481518110613e3557613e35615f4d565b6020026020010151614290565b815250838281518110613e5757613e57615f4d565b6020908102919091010152600101613dee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec9578060011b82018184015160001a8060041c8253600f811660018301535050600101613e9b565b509295945050505050565b60606000806000613ee4856142a3565b919450925090506000816001811115613eff57613eff615fdd565b14613f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f9682846158a8565b855114614025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6885602001518484614d10565b606060208260000151106140505761404b82613ed4565b61113e565b61113e82614da4565b606061113e61407883602001516000815181106130a0576130a0615f4d565b613e71565b60608251821061409c575060408051602081019091526000815261113e565b612a6783838486516140ae9190615b08565b614dba565b60008082518451106140c65782516140c9565b83515b90505b808210801561415057508282815181106140e8576140e8615f4d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061412757614127615f4d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614160578160010191506140cc565b5092915050565b60008082116141d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561424c575081612a67565b82511561425c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156bf565b606061113e61429e83614f92565b61507b565b600080600080846000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f8111614386576000600160009450945094505050614d09565b60b7811161459457600061439b608083615b08565b905080876000015111614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144cf57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d09915050565b60bf81116148e25760006145a960b783615b08565b905080876000015111614664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61481081846158a8565b8951116148c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148d08360016158a8565b9750955060009450614d099350505050565b60f781116149c35760006148f760c083615b08565b9050808760000151116149b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d09915050565b60006149d060f783615b08565b905080876000015111614a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c3781846158a8565b895111614cec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cf78360016158a8565b9750955060019450614d099350505050565b9193909250565b60608167ffffffffffffffff811115614d2b57614d2b61532d565b6040519080825280601f01601f191660200182016040528015614d55576020820181803683370190505b5090508115612a67576000614d6a84866158a8565b90506020820160005b84811015614d8b578281015182820152602001614d73565b84811115614d9a576000858301525b5050509392505050565b606061113e826020015160008460000151614d10565b60608182601f011015614e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f215760405191506000825260208201604052614f89565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f5a578051835260209283019201614f42565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161505d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b6060600080600061508b856142a3565b9194509250905060018160018111156150a6576150a6615fdd565b14615133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513f83856158a8565b146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151e35790505093506000835b86518110156152d1576000806152566040518060400160405280858c6000015161523a9190615b08565b8152602001858c6020015161524f91906158a8565b90526142a3565b50915091506040518060400160405280838361527291906158a8565b8152602001848b6020015161528791906158a8565b81525088858151811061529c5761529c615f4d565b60209081029190910101526152b26001856158a8565b93506152be81836158a8565b6152c890846158a8565b92505050615210565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152ff57600080fd5b50565b803567ffffffffffffffff8116811461531a57600080fd5b919050565b80151581146152ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153a3576153a361532d565b604052919050565b600082601f8301126153bc57600080fd5b813567ffffffffffffffff8111156153d6576153d661532d565b61540760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161535c565b81815284602083860101111561541c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561545257600080fd5b863561545d816152dd565b9550602087013594506040870135935061547960608801615302565b925060808701356154898161531f565b915060a087013567ffffffffffffffff8111156154a557600080fd5b6154b189828a016153ab565b9150509295509295509295565b600060c082840312156154d057600080fd5b60405160c0810167ffffffffffffffff82821081831117156154f4576154f461532d565b81604052829350843583526020850135915061550f826152dd565b81602084015260408501359150615525826152dd565b816040840152606085013560608401526080850135608084015260a085013591508082111561555357600080fd5b50615560858286016153ab565b60a0830152505092915050565b600080600080600085870360e081121561558657600080fd5b863567ffffffffffffffff8082111561559e57600080fd5b6155aa8a838b016154be565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155e357600080fd5b60408901955060c08901359250808311156155fd57600080fd5b828901925089601f84011261561157600080fd5b823591508082111561562257600080fd5b508860208260051b840101111561563857600080fd5b959894975092955050506020019190565b60005b8381101561566457818101518382015260200161564c565b838111156120995750506000910152565b6000815180845261568d816020860160208601615649565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a676020830184615675565b6000602082840312156156e457600080fd5b5035919050565b60ff811681146152ff57600080fd5b6000806000806080858703121561571057600080fd5b843561571b816152dd565b9350602085013561572b816156eb565b93969395505050506040820135916060013590565b60006020828403121561575257600080fd5b813567ffffffffffffffff81111561576957600080fd5b615775848285016154be565b949350505050565b60006020828403121561578f57600080fd5b612a6782615302565b6000806000606084860312156157ad57600080fd5b83356157b8816152dd565b925060208401356157c8816152dd565b915060408401356157d8816152dd565b809150509250925092565b600080600080600060a086880312156157fb57600080fd5b8535615806816152dd565b94506020860135935061581b60408701615302565b9250606086013561582b8161531f565b9150608086013567ffffffffffffffff81111561584757600080fd5b615853888289016153ab565b9150509295509295909350565b60006020828403121561587257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158bb576158bb615879565b500190565b600080604083850312156158d357600080fd5b82516158de816152dd565b60208401519092506158ef816156eb565b809150509250929050565b60006020828403121561590c57600080fd5b8151612a67816152dd565b80516fffffffffffffffffffffffffffffffff8116811461531a57600080fd5b60006060828403121561594957600080fd5b6040516060810181811067ffffffffffffffff8211171561596c5761596c61532d565b6040528251815261597f60208401615917565b602082015261599060408401615917565b60408201529392505050565b6000608082840312156159ae57600080fd5b6040516080810181811067ffffffffffffffff821117156159d1576159d161532d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1d57615a1d61532d565b8360051b6020615a2e81830161535c565b868152918501918181019036841115615a4657600080fd5b865b84811015615a7a57803586811115615a605760008081fd5b615a6c36828b016153ab565b845250918301918301615a48565b50979650505050505050565b600060208284031215615a9857600080fd5b8151612a678161531f565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615af7816049850160208701615649565b919091016049019695505050505050565b600082821015615b1a57615b1a615879565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b4657615b46615879565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b7257615b72615879565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb957615bb9615b7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0d57615c0d615879565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4c57615c4c615879565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c8057615c80615879565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cc757615cc7615879565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615d0257615d02615879565b60008712925087820587128484161615615d1e57615d1e615879565b87850587128184161615615d3457615d34615879565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7c57615d7c615879565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615db057615db0615879565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615dee57615dee615879565b500290565b600082615e0257615e02615b7b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e5260c0830184615675565b98975050505050505050565b805163ffffffff8116811461531a57600080fd5b600060c08284031215615e8457600080fd5b60405160c0810181811067ffffffffffffffff82111715615ea757615ea761532d565b604052615eb383615e5e565b81526020830151615ec3816156eb565b60208201526040830151615ed6816156eb565b6040820152615ee760608401615e5e565b6060820152615ef860808401615e5e565b6080820152615f0960a08401615917565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f4657615f46615879565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8f57615f8f615b7b565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb857615fb8615879565b90039392505050565b60008251615fd3818460208701615649565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3326,13 +3326,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b620020971760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616011806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615431565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b6366004615565565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156b7565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156ca565b611089565b34801561036257600080fd5b506101936103713660046156f2565b611144565b34801561038257600080fd5b50610193610391366004615738565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156ca565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b366004615775565b611dd6565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611def565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615790565b611e49565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156ca565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157db565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120b3565b50610673828261225f565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615858565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c61252c565b6107bd89826158a0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615858565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a0565b909155506108a890508a8a8a8a8a8a6120b3565b50506108b4828261225f565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158b8565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158f2565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a919061592f565b519050610ba4610b9f36869003860186615994565b612608565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d87612664565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061592f565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a6159fa565b8a60400135612694565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a7e565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061592f565b602001516fffffffffffffffffffffffffffffffff166126b8565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a16201388061275e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156b7565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f982612664565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615858565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126b8565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061592f565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126b8565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127ba565b9150611d1f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cf6576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd89190615858565b9050866060015160386000828254611bf09190615b00565b909155505060408701516060880151611c209173ffffffffffffffffffffffffffffffffffffffff851691612818565b6060870151611c2f9082615b00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190615858565b14611cf4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d1a57611acd8660400151876080015160008960a001516127ba565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8190851515815260200190565b60405180910390a281158015611d975750326001145b15611dce576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611de3826010615b17565b61113e90615208615b47565b600080611dfa6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e41574791505090565b505060385490565b600054610100900460ff1615808015611e695750600054600160ff909116105b80611e835750303b158015611e83575060005460ff166001145b611f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61202e612873565b801561209157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120d5575073ffffffffffffffffffffffffffffffffffffffff861615155b1561210c576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121168151611dd6565b67ffffffffffffffff168367ffffffffffffffff161015612163576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a1576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121c2575033731111000000000000000000000000000000001111015b600086868686866040516020016121dd959493929190615a9b565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161224d91906156b7565b60405180910390a45050505050505050565b600154600090612295907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b00565b905060006122a1612986565b90506000816020015160ff16826000015163ffffffff166122c29190615ba2565b905082156123f9576001546000906122f9908390700100000000000000000000000000000000900467ffffffffffffffff16615c0a565b90506000836040015160ff16836123109190615c7e565b6001546123309084906fffffffffffffffffffffffffffffffff16615c7e565b61233a9190615ba2565b60015490915060009061238b906123649084906fffffffffffffffffffffffffffffffff16615d3a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a47565b905060018611156123ba576123b761236482876040015160ff1660018a6123b29190615b00565b612a66565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061242c908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124b9576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124e5906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615dae565b905060006124f748633b9aca00612abb565b6125019083615deb565b905060005a6125109088615b00565b9050808211156108b4576108b46125278284615b00565b612ad2565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120919085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612afb565b60008160000151826020015183604001518460600151604051602001612647949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612647979096959101615dff565b6000806126a086612c07565b90506126ae81868686612c39565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190615858565b61275690836158a0565b421192915050565b60018054829190601090612791908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127ca866000612c69565b905080612800576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261286e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612586565b505050565b600054610100900460ff1661290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e6a565b6000612a5c612a568585612c87565b83612c97565b90505b9392505050565b6000670de0b6b3a7640000612aa7612a7e8583615ba2565b612a9090670de0b6b3a7640000615c0a565b612aa285670de0b6b3a7640000615c7e565b612ca6565b612ab19086615c7e565b612a5c9190615ba2565b600081831015612acb5781612a5f565b5090919050565b6000805a90505b825a612ae59083615b00565b101561286e57612af482615f0d565b9150612ad9565b6000612b5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cd79092919063ffffffff16565b80519091501561286e5780806020019051810190612b7b9190615a7e565b61286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2391815260200190565b6040516020818303038152906040529050919050565b6000612c6084612c4a878686612ce6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612acb5781612a5f565b6000818312612acb5781612a5f565b6000612a5f670de0b6b3a764000083612cbe86613764565b612cc89190615c7e565b612cd29190615ba2565b6139a8565b6060612a5c8484600085613be7565b60606000845111612d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d5e84613d7d565b90506000612d6b86613e69565b9050600084604051602001612d8291815260200190565b60405160208183030381529060405290506000805b84518110156136db576000858281518110612db457612db4615f45565b602002602001015190508451831115612e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f085780518051602091820120604051612e9d92612e7792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b61305f565b805151602011612fbe5780518051602091820120604051612f3292612e7792910190815260200190565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b80518451602080870191909120825191909201201461305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b61306b601060016158a0565b8160200151510361324757845183036131df576130a5816020015160108151811061309857613098615f45565b6020026020010151613ecc565b96506000875111613138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b600186516131469190615b00565b82146131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a5f565b60008584815181106131f3576131f3615f45565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061321e5761321e615f45565b602002602001015190506132318161402c565b955061323e6001866158a0565b945050506136c8565b60028160200151510361364057600061325f82614051565b905060008160008151811061327657613276615f45565b016020015160f81c9050600061328d600283615f74565b613298906002615f96565b905060006132a9848360ff16614075565b905060006132b78a89614075565b905060006132c583836140ab565b905080835114613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff85166002148061336c575060ff85166003145b1561355b5780825114613401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61341b876020015160018151811061309857613098615f45565b9c5060008d51116134ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134bc9190615b00565b881461354a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a5f565b60ff8516158061356e575060ff85166001145b156135ad5761359a876020015160018151811061358d5761358d615f45565b602002602001015161402c565b99506135a6818a6158a0565b9850613635565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136c8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136d381615f0d565b915050612d97565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137dc8461415f565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139d957506000919050565b680755bf798b4a1bf1e58212613a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d209190615fb9565b60006040518083038185875af1925050503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b5091509150613d72828286614235565b979650505050505050565b80516060908067ffffffffffffffff811115613d9b57613d9b615325565b604051908082528060200260200182016040528015613de057816020015b6040805180820190915260608082526020820152815260200190600190039081613db95790505b50915060005b81811015613e62576040518060400160405280858381518110613e0b57613e0b615f45565b60200260200101518152602001613e3a868481518110613e2d57613e2d615f45565b6020026020010151614288565b815250838281518110613e4f57613e4f615f45565b6020908102919091010152600101613de6565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec1578060011b82018184015160001a8060041c8253600f811660018301535050600101613e93565b509295945050505050565b60606000806000613edc8561429b565b919450925090506000816001811115613ef757613ef7615fd5565b14613f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f8e82846158a0565b85511461401d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6085602001518484614d08565b606060208260000151106140485761404382613ecc565b61113e565b61113e82614d9c565b606061113e614070836020015160008151811061309857613098615f45565b613e69565b606082518210614094575060408051602081019091526000815261113e565b612a5f83838486516140a69190615b00565b614db2565b60008082518451106140be5782516140c1565b83515b90505b808210801561414857508282815181106140e0576140e0615f45565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411f5761411f615f45565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614158578160010191506140c4565b5092915050565b60008082116141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614244575081612a5f565b8251156142545782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156b7565b606061113e61429683614f8a565b615073565b600080600080846000015111614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f811161437e576000600160009450945094505050614d01565b60b7811161458c576000614393608083615b00565b90508087600001511161444e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144c757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d01915050565b60bf81116148da5760006145a160b783615b00565b90508087600001511161465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361473a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c603781116147fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61480881846158a0565b8951116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148c88360016158a0565b9750955060009450614d019350505050565b60f781116149bb5760006148ef60c083615b00565b9050808760000151116149aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d01915050565b60006149c860f783615b00565b905080876000015111614a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c2f81846158a0565b895111614ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cef8360016158a0565b9750955060019450614d019350505050565b9193909250565b60608167ffffffffffffffff811115614d2357614d23615325565b6040519080825280601f01601f191660200182016040528015614d4d576020820181803683370190505b5090508115612a5f576000614d6284866158a0565b90506020820160005b84811015614d83578281015182820152602001614d6b565b84811115614d92576000858301525b5050509392505050565b606061113e826020015160008460000151614d08565b60608182601f011015614e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f195760405191506000825260208201604052614f81565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f52578051835260209283019201614f3a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111615055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b606060008060006150838561429b565b91945092509050600181600181111561509e5761509e615fd5565b1461512b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513783856158a0565b146151c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151db5790505093506000835b86518110156152c95760008061524e6040518060400160405280858c600001516152329190615b00565b8152602001858c6020015161524791906158a0565b905261429b565b50915091506040518060400160405280838361526a91906158a0565b8152602001848b6020015161527f91906158a0565b81525088858151811061529457615294615f45565b60209081029190910101526152aa6001856158a0565b93506152b681836158a0565b6152c090846158a0565b92505050615208565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152f757600080fd5b50565b803567ffffffffffffffff8116811461531257600080fd5b919050565b80151581146152f757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561539b5761539b615325565b604052919050565b600082601f8301126153b457600080fd5b813567ffffffffffffffff8111156153ce576153ce615325565b6153ff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615354565b81815284602083860101111561541457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561544a57600080fd5b8635615455816152d5565b95506020870135945060408701359350615471606088016152fa565b9250608087013561548181615317565b915060a087013567ffffffffffffffff81111561549d57600080fd5b6154a989828a016153a3565b9150509295509295509295565b600060c082840312156154c857600080fd5b60405160c0810167ffffffffffffffff82821081831117156154ec576154ec615325565b816040528293508435835260208501359150615507826152d5565b8160208401526040850135915061551d826152d5565b816040840152606085013560608401526080850135608084015260a085013591508082111561554b57600080fd5b50615558858286016153a3565b60a0830152505092915050565b600080600080600085870360e081121561557e57600080fd5b863567ffffffffffffffff8082111561559657600080fd5b6155a28a838b016154b6565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155db57600080fd5b60408901955060c08901359250808311156155f557600080fd5b828901925089601f84011261560957600080fd5b823591508082111561561a57600080fd5b508860208260051b840101111561563057600080fd5b959894975092955050506020019190565b60005b8381101561565c578181015183820152602001615644565b838111156120915750506000910152565b60008151808452615685816020860160208601615641565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a5f602083018461566d565b6000602082840312156156dc57600080fd5b5035919050565b60ff811681146152f757600080fd5b6000806000806080858703121561570857600080fd5b8435615713816152d5565b93506020850135615723816156e3565b93969395505050506040820135916060013590565b60006020828403121561574a57600080fd5b813567ffffffffffffffff81111561576157600080fd5b61576d848285016154b6565b949350505050565b60006020828403121561578757600080fd5b612a5f826152fa565b6000806000606084860312156157a557600080fd5b83356157b0816152d5565b925060208401356157c0816152d5565b915060408401356157d0816152d5565b809150509250925092565b600080600080600060a086880312156157f357600080fd5b85356157fe816152d5565b945060208601359350615813604087016152fa565b9250606086013561582381615317565b9150608086013567ffffffffffffffff81111561583f57600080fd5b61584b888289016153a3565b9150509295509295909350565b60006020828403121561586a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158b3576158b3615871565b500190565b600080604083850312156158cb57600080fd5b82516158d6816152d5565b60208401519092506158e7816156e3565b809150509250929050565b60006020828403121561590457600080fd5b8151612a5f816152d5565b80516fffffffffffffffffffffffffffffffff8116811461531257600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964615325565b604052825181526159776020840161590f565b60208201526159886040840161590f565b60408201529392505050565b6000608082840312156159a657600080fd5b6040516080810181811067ffffffffffffffff821117156159c9576159c9615325565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1557615a15615325565b8360051b6020615a26818301615354565b868152918501918181019036841115615a3e57600080fd5b865b84811015615a7257803586811115615a585760008081fd5b615a6436828b016153a3565b845250918301918301615a40565b50979650505050505050565b600060208284031215615a9057600080fd5b8151612a5f81615317565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615aef816049850160208701615641565b919091016049019695505050505050565b600082821015615b1257615b12615871565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b3e57615b3e615871565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b6a57615b6a615871565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb157615bb1615b73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0557615c05615871565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4457615c44615871565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c7857615c78615871565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615871565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615871565b60008712925087820587128484161615615d1657615d16615871565b87850587128184161615615d2c57615d2c615871565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7457615d74615871565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615da857615da8615871565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615de657615de6615871565b500290565b600082615dfa57615dfa615b73565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e4a60c083018461566d565b98975050505050505050565b805163ffffffff8116811461531257600080fd5b600060c08284031215615e7c57600080fd5b60405160c0810181811067ffffffffffffffff82111715615e9f57615e9f615325565b604052615eab83615e56565b81526020830151615ebb816156e3565b60208201526040830151615ece816156e3565b6040820152615edf60608401615e56565b6060820152615ef060808401615e56565b6080820152615f0160a0840161590f565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f3e57615f3e615871565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8757615f87615b73565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb057615fb0615871565b90039392505050565b60008251615fcb818460208701615641565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", - "deployedCode": "0x60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615431565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b6366004615565565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156b7565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156ca565b611089565b34801561036257600080fd5b506101936103713660046156f2565b611144565b34801561038257600080fd5b50610193610391366004615738565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156ca565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b366004615775565b611dd6565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611def565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615790565b611e49565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156ca565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157db565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120b3565b50610673828261225f565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615858565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c61252c565b6107bd89826158a0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615858565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a0565b909155506108a890508a8a8a8a8a8a6120b3565b50506108b4828261225f565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158b8565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158f2565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a919061592f565b519050610ba4610b9f36869003860186615994565b612608565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d87612664565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061592f565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a6159fa565b8a60400135612694565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a7e565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061592f565b602001516fffffffffffffffffffffffffffffffff166126b8565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a16201388061275e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156b7565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f982612664565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615858565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126b8565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061592f565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126b8565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127ba565b9150611d1f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cf6576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd89190615858565b9050866060015160386000828254611bf09190615b00565b909155505060408701516060880151611c209173ffffffffffffffffffffffffffffffffffffffff851691612818565b6060870151611c2f9082615b00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190615858565b14611cf4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d1a57611acd8660400151876080015160008960a001516127ba565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8190851515815260200190565b60405180910390a281158015611d975750326001145b15611dce576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611de3826010615b17565b61113e90615208615b47565b600080611dfa6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e41574791505090565b505060385490565b600054610100900460ff1615808015611e695750600054600160ff909116105b80611e835750303b158015611e83575060005460ff166001145b611f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61202e612873565b801561209157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120d5575073ffffffffffffffffffffffffffffffffffffffff861615155b1561210c576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121168151611dd6565b67ffffffffffffffff168367ffffffffffffffff161015612163576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a1576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121c2575033731111000000000000000000000000000000001111015b600086868686866040516020016121dd959493929190615a9b565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161224d91906156b7565b60405180910390a45050505050505050565b600154600090612295907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b00565b905060006122a1612986565b90506000816020015160ff16826000015163ffffffff166122c29190615ba2565b905082156123f9576001546000906122f9908390700100000000000000000000000000000000900467ffffffffffffffff16615c0a565b90506000836040015160ff16836123109190615c7e565b6001546123309084906fffffffffffffffffffffffffffffffff16615c7e565b61233a9190615ba2565b60015490915060009061238b906123649084906fffffffffffffffffffffffffffffffff16615d3a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a47565b905060018611156123ba576123b761236482876040015160ff1660018a6123b29190615b00565b612a66565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061242c908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124b9576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124e5906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615dae565b905060006124f748633b9aca00612abb565b6125019083615deb565b905060005a6125109088615b00565b9050808211156108b4576108b46125278284615b00565b612ad2565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120919085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612afb565b60008160000151826020015183604001518460600151604051602001612647949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612647979096959101615dff565b6000806126a086612c07565b90506126ae81868686612c39565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190615858565b61275690836158a0565b421192915050565b60018054829190601090612791908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127ca866000612c69565b905080612800576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261286e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612586565b505050565b600054610100900460ff1661290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e6a565b6000612a5c612a568585612c87565b83612c97565b90505b9392505050565b6000670de0b6b3a7640000612aa7612a7e8583615ba2565b612a9090670de0b6b3a7640000615c0a565b612aa285670de0b6b3a7640000615c7e565b612ca6565b612ab19086615c7e565b612a5c9190615ba2565b600081831015612acb5781612a5f565b5090919050565b6000805a90505b825a612ae59083615b00565b101561286e57612af482615f0d565b9150612ad9565b6000612b5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cd79092919063ffffffff16565b80519091501561286e5780806020019051810190612b7b9190615a7e565b61286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2391815260200190565b6040516020818303038152906040529050919050565b6000612c6084612c4a878686612ce6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612acb5781612a5f565b6000818312612acb5781612a5f565b6000612a5f670de0b6b3a764000083612cbe86613764565b612cc89190615c7e565b612cd29190615ba2565b6139a8565b6060612a5c8484600085613be7565b60606000845111612d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d5e84613d7d565b90506000612d6b86613e69565b9050600084604051602001612d8291815260200190565b60405160208183030381529060405290506000805b84518110156136db576000858281518110612db457612db4615f45565b602002602001015190508451831115612e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f085780518051602091820120604051612e9d92612e7792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b61305f565b805151602011612fbe5780518051602091820120604051612f3292612e7792910190815260200190565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b80518451602080870191909120825191909201201461305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b61306b601060016158a0565b8160200151510361324757845183036131df576130a5816020015160108151811061309857613098615f45565b6020026020010151613ecc565b96506000875111613138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b600186516131469190615b00565b82146131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a5f565b60008584815181106131f3576131f3615f45565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061321e5761321e615f45565b602002602001015190506132318161402c565b955061323e6001866158a0565b945050506136c8565b60028160200151510361364057600061325f82614051565b905060008160008151811061327657613276615f45565b016020015160f81c9050600061328d600283615f74565b613298906002615f96565b905060006132a9848360ff16614075565b905060006132b78a89614075565b905060006132c583836140ab565b905080835114613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff85166002148061336c575060ff85166003145b1561355b5780825114613401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61341b876020015160018151811061309857613098615f45565b9c5060008d51116134ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134bc9190615b00565b881461354a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a5f565b60ff8516158061356e575060ff85166001145b156135ad5761359a876020015160018151811061358d5761358d615f45565b602002602001015161402c565b99506135a6818a6158a0565b9850613635565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136c8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136d381615f0d565b915050612d97565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137dc8461415f565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139d957506000919050565b680755bf798b4a1bf1e58212613a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d209190615fb9565b60006040518083038185875af1925050503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b5091509150613d72828286614235565b979650505050505050565b80516060908067ffffffffffffffff811115613d9b57613d9b615325565b604051908082528060200260200182016040528015613de057816020015b6040805180820190915260608082526020820152815260200190600190039081613db95790505b50915060005b81811015613e62576040518060400160405280858381518110613e0b57613e0b615f45565b60200260200101518152602001613e3a868481518110613e2d57613e2d615f45565b6020026020010151614288565b815250838281518110613e4f57613e4f615f45565b6020908102919091010152600101613de6565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec1578060011b82018184015160001a8060041c8253600f811660018301535050600101613e93565b509295945050505050565b60606000806000613edc8561429b565b919450925090506000816001811115613ef757613ef7615fd5565b14613f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f8e82846158a0565b85511461401d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6085602001518484614d08565b606060208260000151106140485761404382613ecc565b61113e565b61113e82614d9c565b606061113e614070836020015160008151811061309857613098615f45565b613e69565b606082518210614094575060408051602081019091526000815261113e565b612a5f83838486516140a69190615b00565b614db2565b60008082518451106140be5782516140c1565b83515b90505b808210801561414857508282815181106140e0576140e0615f45565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411f5761411f615f45565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614158578160010191506140c4565b5092915050565b60008082116141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614244575081612a5f565b8251156142545782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156b7565b606061113e61429683614f8a565b615073565b600080600080846000015111614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f811161437e576000600160009450945094505050614d01565b60b7811161458c576000614393608083615b00565b90508087600001511161444e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144c757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d01915050565b60bf81116148da5760006145a160b783615b00565b90508087600001511161465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361473a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c603781116147fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61480881846158a0565b8951116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148c88360016158a0565b9750955060009450614d019350505050565b60f781116149bb5760006148ef60c083615b00565b9050808760000151116149aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d01915050565b60006149c860f783615b00565b905080876000015111614a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c2f81846158a0565b895111614ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cef8360016158a0565b9750955060019450614d019350505050565b9193909250565b60608167ffffffffffffffff811115614d2357614d23615325565b6040519080825280601f01601f191660200182016040528015614d4d576020820181803683370190505b5090508115612a5f576000614d6284866158a0565b90506020820160005b84811015614d83578281015182820152602001614d6b565b84811115614d92576000858301525b5050509392505050565b606061113e826020015160008460000151614d08565b60608182601f011015614e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f195760405191506000825260208201604052614f81565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f52578051835260209283019201614f3a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111615055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b606060008060006150838561429b565b91945092509050600181600181111561509e5761509e615fd5565b1461512b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513783856158a0565b146151c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151db5790505093506000835b86518110156152c95760008061524e6040518060400160405280858c600001516152329190615b00565b8152602001858c6020015161524791906158a0565b905261429b565b50915091506040518060400160405280838361526a91906158a0565b8152602001848b6020015161527f91906158a0565b81525088858151811061529457615294615f45565b60209081029190910101526152aa6001856158a0565b93506152b681836158a0565b6152c090846158a0565b92505050615208565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152f757600080fd5b50565b803567ffffffffffffffff8116811461531257600080fd5b919050565b80151581146152f757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561539b5761539b615325565b604052919050565b600082601f8301126153b457600080fd5b813567ffffffffffffffff8111156153ce576153ce615325565b6153ff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615354565b81815284602083860101111561541457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561544a57600080fd5b8635615455816152d5565b95506020870135945060408701359350615471606088016152fa565b9250608087013561548181615317565b915060a087013567ffffffffffffffff81111561549d57600080fd5b6154a989828a016153a3565b9150509295509295509295565b600060c082840312156154c857600080fd5b60405160c0810167ffffffffffffffff82821081831117156154ec576154ec615325565b816040528293508435835260208501359150615507826152d5565b8160208401526040850135915061551d826152d5565b816040840152606085013560608401526080850135608084015260a085013591508082111561554b57600080fd5b50615558858286016153a3565b60a0830152505092915050565b600080600080600085870360e081121561557e57600080fd5b863567ffffffffffffffff8082111561559657600080fd5b6155a28a838b016154b6565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155db57600080fd5b60408901955060c08901359250808311156155f557600080fd5b828901925089601f84011261560957600080fd5b823591508082111561561a57600080fd5b508860208260051b840101111561563057600080fd5b959894975092955050506020019190565b60005b8381101561565c578181015183820152602001615644565b838111156120915750506000910152565b60008151808452615685816020860160208601615641565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a5f602083018461566d565b6000602082840312156156dc57600080fd5b5035919050565b60ff811681146152f757600080fd5b6000806000806080858703121561570857600080fd5b8435615713816152d5565b93506020850135615723816156e3565b93969395505050506040820135916060013590565b60006020828403121561574a57600080fd5b813567ffffffffffffffff81111561576157600080fd5b61576d848285016154b6565b949350505050565b60006020828403121561578757600080fd5b612a5f826152fa565b6000806000606084860312156157a557600080fd5b83356157b0816152d5565b925060208401356157c0816152d5565b915060408401356157d0816152d5565b809150509250925092565b600080600080600060a086880312156157f357600080fd5b85356157fe816152d5565b945060208601359350615813604087016152fa565b9250606086013561582381615317565b9150608086013567ffffffffffffffff81111561583f57600080fd5b61584b888289016153a3565b9150509295509295909350565b60006020828403121561586a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158b3576158b3615871565b500190565b600080604083850312156158cb57600080fd5b82516158d6816152d5565b60208401519092506158e7816156e3565b809150509250929050565b60006020828403121561590457600080fd5b8151612a5f816152d5565b80516fffffffffffffffffffffffffffffffff8116811461531257600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964615325565b604052825181526159776020840161590f565b60208201526159886040840161590f565b60408201529392505050565b6000608082840312156159a657600080fd5b6040516080810181811067ffffffffffffffff821117156159c9576159c9615325565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1557615a15615325565b8360051b6020615a26818301615354565b868152918501918181019036841115615a3e57600080fd5b865b84811015615a7257803586811115615a585760008081fd5b615a6436828b016153a3565b845250918301918301615a40565b50979650505050505050565b600060208284031215615a9057600080fd5b8151612a5f81615317565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615aef816049850160208701615641565b919091016049019695505050505050565b600082821015615b1257615b12615871565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b3e57615b3e615871565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b6a57615b6a615871565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb157615bb1615b73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0557615c05615871565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4457615c44615871565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c7857615c78615871565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615871565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615871565b60008712925087820587128484161615615d1657615d16615871565b87850587128184161615615d2c57615d2c615871565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7457615d74615871565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615da857615da8615871565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615de657615de6615871565b500290565b600082615dfa57615dfa615b73565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e4a60c083018461566d565b98975050505050505050565b805163ffffffff8116811461531257600080fd5b600060c08284031215615e7c57600080fd5b60405160c0810181811067ffffffffffffffff82111715615e9f57615e9f615325565b604052615eab83615e56565b81526020830151615ebb816156e3565b60208201526040830151615ece816156e3565b6040820152615edf60608401615e56565b6060820152615ef060808401615e56565b6080820152615f0160a0840161590f565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f3e57615f3e615871565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8757615f87615b73565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb057615fb0615871565b90039392505050565b60008251615fcb818460208701615641565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200209f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616019806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615439565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b636600461556d565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156bf565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156d2565b611089565b34801561036257600080fd5b506101936103713660046156fa565b611144565b34801561038257600080fd5b50610193610391366004615740565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156d2565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b36600461577d565b611dde565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611df7565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615798565b611e51565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156d2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157e3565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120bb565b506106738282612267565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615860565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612534565b6107bd89826158a8565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615860565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a8565b909155506108a890508a8a8a8a8a8a6120bb565b50506108b48282612267565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158c0565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158fa565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190615937565b519050610ba4610b9f3686900386018661599c565b612610565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d8761266c565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190615937565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a615a02565b8a6040013561269c565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a86565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190615937565b602001516fffffffffffffffffffffffffffffffff166126c0565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a162013880612766565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615aa3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156bf565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f98261266c565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615860565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126c0565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190615937565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126c0565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127c2565b9150611d27565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cfe57856060015160386000828254611b5d9190615b08565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190615860565b9050611c28876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166128209092919063ffffffff16565b6060870151611c379082615b08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615860565b14611cfc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d2257611acd8660400151876080015160008960a001516127c2565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8990851515815260200190565b60405180910390a281158015611d9f5750326001145b15611dd6576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611deb826010615b1f565b61113e90615208615b4f565b600080611e026108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e49574791505090565b505060385490565b600054610100900460ff1615808015611e715750600054600160ff909116105b80611e8b5750303b158015611e8b575060005460ff166001145b611f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f7557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61203661287b565b801561209957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120dd575073ffffffffffffffffffffffffffffffffffffffff861615155b15612114576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211e8151611dde565b67ffffffffffffffff168367ffffffffffffffff16101561216b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121ca575033731111000000000000000000000000000000001111015b600086868686866040516020016121e5959493929190615aa3565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225591906156bf565b60405180910390a45050505050505050565b60015460009061229d907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b08565b905060006122a961298e565b90506000816020015160ff16826000015163ffffffff166122ca9190615baa565b9050821561240157600154600090612301908390700100000000000000000000000000000000900467ffffffffffffffff16615c12565b90506000836040015160ff16836123189190615c86565b6001546123389084906fffffffffffffffffffffffffffffffff16615c86565b6123429190615baa565b6001549091506000906123939061236c9084906fffffffffffffffffffffffffffffffff16615d42565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a4f565b905060018611156123c2576123bf61236c82876040015160ff1660018a6123ba9190615b08565b612a6e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612434908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124c1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124ed906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615db6565b905060006124ff48633b9aca00612ac3565b6125099083615df3565b905060005a6125189088615b08565b9050808211156108b4576108b461252f8284615b08565b612ada565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120999085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b03565b6000816000015182602001518360400151846060015160405160200161264f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a0880151935160009761264f979096959101615e07565b6000806126a886612c0f565b90506126b681868686612c41565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615860565b61275e90836158a8565b421192915050565b60018054829190601090612799908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127d2866000612c71565b905080612808576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526128769084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161258e565b505050565b600054610100900460ff16612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e72565b6000612a64612a5e8585612c8f565b83612c9f565b90505b9392505050565b6000670de0b6b3a7640000612aaf612a868583615baa565b612a9890670de0b6b3a7640000615c12565b612aaa85670de0b6b3a7640000615c86565b612cae565b612ab99086615c86565b612a649190615baa565b600081831015612ad35781612a67565b5090919050565b6000805a90505b825a612aed9083615b08565b101561287657612afc82615f15565b9150612ae1565b6000612b65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cdf9092919063ffffffff16565b8051909150156128765780806020019051810190612b839190615a86565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2b91815260200190565b6040516020818303038152906040529050919050565b6000612c6884612c52878686612cee565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ad35781612a67565b6000818312612ad35781612a67565b6000612a67670de0b6b3a764000083612cc68661376c565b612cd09190615c86565b612cda9190615baa565b6139b0565b6060612a648484600085613bef565b60606000845111612d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d6684613d85565b90506000612d7386613e71565b9050600084604051602001612d8a91815260200190565b60405160208183030381529060405290506000805b84518110156136e3576000858281518110612dbc57612dbc615f4d565b602002602001015190508451831115612e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f105780518051602091820120604051612ea592612e7f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b613067565b805151602011612fc65780518051602091820120604051612f3a92612e7f92910190815260200190565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b805184516020808701919091208251919092012014613067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b613073601060016158a8565b8160200151510361324f57845183036131e7576130ad81602001516010815181106130a0576130a0615f4d565b6020026020010151613ed4565b96506000875111613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b6001865161314e9190615b08565b82146131dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a67565b60008584815181106131fb576131fb615f4d565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061322657613226615f4d565b6020026020010151905061323981614034565b95506132466001866158a8565b945050506136d0565b60028160200151510361364857600061326782614059565b905060008160008151811061327e5761327e615f4d565b016020015160f81c90506000613295600283615f7c565b6132a0906002615f9e565b905060006132b1848360ff1661407d565b905060006132bf8a8961407d565b905060006132cd83836140b3565b90508083511461335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff851660021480613374575060ff85166003145b156135635780825114613409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61342387602001516001815181106130a0576130a0615f4d565b9c5060008d51116134b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134c49190615b08565b8814613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a67565b60ff85161580613576575060ff85166001145b156135b5576135a2876020015160018151811061359557613595615f4d565b6020026020010151614034565b99506135ae818a6158a8565b985061363d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136d0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136db81615f15565b915050612d9f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137e484614167565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139e157506000919050565b680755bf798b4a1bf1e58212613a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d289190615fc1565b60006040518083038185875af1925050503d8060008114613d65576040519150601f19603f3d011682016040523d82523d6000602084013e613d6a565b606091505b5091509150613d7a82828661423d565b979650505050505050565b80516060908067ffffffffffffffff811115613da357613da361532d565b604051908082528060200260200182016040528015613de857816020015b6040805180820190915260608082526020820152815260200190600190039081613dc15790505b50915060005b81811015613e6a576040518060400160405280858381518110613e1357613e13615f4d565b60200260200101518152602001613e42868481518110613e3557613e35615f4d565b6020026020010151614290565b815250838281518110613e5757613e57615f4d565b6020908102919091010152600101613dee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec9578060011b82018184015160001a8060041c8253600f811660018301535050600101613e9b565b509295945050505050565b60606000806000613ee4856142a3565b919450925090506000816001811115613eff57613eff615fdd565b14613f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f9682846158a8565b855114614025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6885602001518484614d10565b606060208260000151106140505761404b82613ed4565b61113e565b61113e82614da4565b606061113e61407883602001516000815181106130a0576130a0615f4d565b613e71565b60608251821061409c575060408051602081019091526000815261113e565b612a6783838486516140ae9190615b08565b614dba565b60008082518451106140c65782516140c9565b83515b90505b808210801561415057508282815181106140e8576140e8615f4d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061412757614127615f4d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614160578160010191506140cc565b5092915050565b60008082116141d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561424c575081612a67565b82511561425c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156bf565b606061113e61429e83614f92565b61507b565b600080600080846000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f8111614386576000600160009450945094505050614d09565b60b7811161459457600061439b608083615b08565b905080876000015111614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144cf57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d09915050565b60bf81116148e25760006145a960b783615b08565b905080876000015111614664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61481081846158a8565b8951116148c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148d08360016158a8565b9750955060009450614d099350505050565b60f781116149c35760006148f760c083615b08565b9050808760000151116149b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d09915050565b60006149d060f783615b08565b905080876000015111614a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c3781846158a8565b895111614cec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cf78360016158a8565b9750955060019450614d099350505050565b9193909250565b60608167ffffffffffffffff811115614d2b57614d2b61532d565b6040519080825280601f01601f191660200182016040528015614d55576020820181803683370190505b5090508115612a67576000614d6a84866158a8565b90506020820160005b84811015614d8b578281015182820152602001614d73565b84811115614d9a576000858301525b5050509392505050565b606061113e826020015160008460000151614d10565b60608182601f011015614e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f215760405191506000825260208201604052614f89565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f5a578051835260209283019201614f42565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161505d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b6060600080600061508b856142a3565b9194509250905060018160018111156150a6576150a6615fdd565b14615133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513f83856158a8565b146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151e35790505093506000835b86518110156152d1576000806152566040518060400160405280858c6000015161523a9190615b08565b8152602001858c6020015161524f91906158a8565b90526142a3565b50915091506040518060400160405280838361527291906158a8565b8152602001848b6020015161528791906158a8565b81525088858151811061529c5761529c615f4d565b60209081029190910101526152b26001856158a8565b93506152be81836158a8565b6152c890846158a8565b92505050615210565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152ff57600080fd5b50565b803567ffffffffffffffff8116811461531a57600080fd5b919050565b80151581146152ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153a3576153a361532d565b604052919050565b600082601f8301126153bc57600080fd5b813567ffffffffffffffff8111156153d6576153d661532d565b61540760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161535c565b81815284602083860101111561541c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561545257600080fd5b863561545d816152dd565b9550602087013594506040870135935061547960608801615302565b925060808701356154898161531f565b915060a087013567ffffffffffffffff8111156154a557600080fd5b6154b189828a016153ab565b9150509295509295509295565b600060c082840312156154d057600080fd5b60405160c0810167ffffffffffffffff82821081831117156154f4576154f461532d565b81604052829350843583526020850135915061550f826152dd565b81602084015260408501359150615525826152dd565b816040840152606085013560608401526080850135608084015260a085013591508082111561555357600080fd5b50615560858286016153ab565b60a0830152505092915050565b600080600080600085870360e081121561558657600080fd5b863567ffffffffffffffff8082111561559e57600080fd5b6155aa8a838b016154be565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155e357600080fd5b60408901955060c08901359250808311156155fd57600080fd5b828901925089601f84011261561157600080fd5b823591508082111561562257600080fd5b508860208260051b840101111561563857600080fd5b959894975092955050506020019190565b60005b8381101561566457818101518382015260200161564c565b838111156120995750506000910152565b6000815180845261568d816020860160208601615649565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a676020830184615675565b6000602082840312156156e457600080fd5b5035919050565b60ff811681146152ff57600080fd5b6000806000806080858703121561571057600080fd5b843561571b816152dd565b9350602085013561572b816156eb565b93969395505050506040820135916060013590565b60006020828403121561575257600080fd5b813567ffffffffffffffff81111561576957600080fd5b615775848285016154be565b949350505050565b60006020828403121561578f57600080fd5b612a6782615302565b6000806000606084860312156157ad57600080fd5b83356157b8816152dd565b925060208401356157c8816152dd565b915060408401356157d8816152dd565b809150509250925092565b600080600080600060a086880312156157fb57600080fd5b8535615806816152dd565b94506020860135935061581b60408701615302565b9250606086013561582b8161531f565b9150608086013567ffffffffffffffff81111561584757600080fd5b615853888289016153ab565b9150509295509295909350565b60006020828403121561587257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158bb576158bb615879565b500190565b600080604083850312156158d357600080fd5b82516158de816152dd565b60208401519092506158ef816156eb565b809150509250929050565b60006020828403121561590c57600080fd5b8151612a67816152dd565b80516fffffffffffffffffffffffffffffffff8116811461531a57600080fd5b60006060828403121561594957600080fd5b6040516060810181811067ffffffffffffffff8211171561596c5761596c61532d565b6040528251815261597f60208401615917565b602082015261599060408401615917565b60408201529392505050565b6000608082840312156159ae57600080fd5b6040516080810181811067ffffffffffffffff821117156159d1576159d161532d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1d57615a1d61532d565b8360051b6020615a2e81830161535c565b868152918501918181019036841115615a4657600080fd5b865b84811015615a7a57803586811115615a605760008081fd5b615a6c36828b016153ab565b845250918301918301615a48565b50979650505050505050565b600060208284031215615a9857600080fd5b8151612a678161531f565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615af7816049850160208701615649565b919091016049019695505050505050565b600082821015615b1a57615b1a615879565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b4657615b46615879565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b7257615b72615879565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb957615bb9615b7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0d57615c0d615879565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4c57615c4c615879565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c8057615c80615879565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cc757615cc7615879565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615d0257615d02615879565b60008712925087820587128484161615615d1e57615d1e615879565b87850587128184161615615d3457615d34615879565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7c57615d7c615879565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615db057615db0615879565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615dee57615dee615879565b500290565b600082615e0257615e02615b7b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e5260c0830184615675565b98975050505050505050565b805163ffffffff8116811461531a57600080fd5b600060c08284031215615e8457600080fd5b60405160c0810181811067ffffffffffffffff82111715615ea757615ea761532d565b604052615eb383615e5e565b81526020830151615ec3816156eb565b60208201526040830151615ed6816156eb565b6040820152615ee760608401615e5e565b6060820152615ef860808401615e5e565b6080820152615f0960a08401615917565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f4657615f46615879565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8f57615f8f615b7b565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb857615fb8615879565b90039392505050565b60008251615fd3818460208701615649565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "deployedCode": "0x60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615439565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b636600461556d565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156bf565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156d2565b611089565b34801561036257600080fd5b506101936103713660046156fa565b611144565b34801561038257600080fd5b50610193610391366004615740565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156d2565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b36600461577d565b611dde565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611df7565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615798565b611e51565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156d2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157e3565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120bb565b506106738282612267565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615860565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612534565b6107bd89826158a8565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615860565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a8565b909155506108a890508a8a8a8a8a8a6120bb565b50506108b48282612267565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158c0565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158fa565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190615937565b519050610ba4610b9f3686900386018661599c565b612610565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d8761266c565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190615937565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a615a02565b8a6040013561269c565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a86565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190615937565b602001516fffffffffffffffffffffffffffffffff166126c0565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a162013880612766565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615aa3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156bf565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f98261266c565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615860565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126c0565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190615937565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126c0565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127c2565b9150611d27565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cfe57856060015160386000828254611b5d9190615b08565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190615860565b9050611c28876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166128209092919063ffffffff16565b6060870151611c379082615b08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615860565b14611cfc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d2257611acd8660400151876080015160008960a001516127c2565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8990851515815260200190565b60405180910390a281158015611d9f5750326001145b15611dd6576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611deb826010615b1f565b61113e90615208615b4f565b600080611e026108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e49574791505090565b505060385490565b600054610100900460ff1615808015611e715750600054600160ff909116105b80611e8b5750303b158015611e8b575060005460ff166001145b611f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f7557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61203661287b565b801561209957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120dd575073ffffffffffffffffffffffffffffffffffffffff861615155b15612114576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211e8151611dde565b67ffffffffffffffff168367ffffffffffffffff16101561216b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121ca575033731111000000000000000000000000000000001111015b600086868686866040516020016121e5959493929190615aa3565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225591906156bf565b60405180910390a45050505050505050565b60015460009061229d907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b08565b905060006122a961298e565b90506000816020015160ff16826000015163ffffffff166122ca9190615baa565b9050821561240157600154600090612301908390700100000000000000000000000000000000900467ffffffffffffffff16615c12565b90506000836040015160ff16836123189190615c86565b6001546123389084906fffffffffffffffffffffffffffffffff16615c86565b6123429190615baa565b6001549091506000906123939061236c9084906fffffffffffffffffffffffffffffffff16615d42565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a4f565b905060018611156123c2576123bf61236c82876040015160ff1660018a6123ba9190615b08565b612a6e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612434908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124c1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124ed906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615db6565b905060006124ff48633b9aca00612ac3565b6125099083615df3565b905060005a6125189088615b08565b9050808211156108b4576108b461252f8284615b08565b612ada565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120999085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b03565b6000816000015182602001518360400151846060015160405160200161264f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a0880151935160009761264f979096959101615e07565b6000806126a886612c0f565b90506126b681868686612c41565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615860565b61275e90836158a8565b421192915050565b60018054829190601090612799908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127d2866000612c71565b905080612808576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526128769084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161258e565b505050565b600054610100900460ff16612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e72565b6000612a64612a5e8585612c8f565b83612c9f565b90505b9392505050565b6000670de0b6b3a7640000612aaf612a868583615baa565b612a9890670de0b6b3a7640000615c12565b612aaa85670de0b6b3a7640000615c86565b612cae565b612ab99086615c86565b612a649190615baa565b600081831015612ad35781612a67565b5090919050565b6000805a90505b825a612aed9083615b08565b101561287657612afc82615f15565b9150612ae1565b6000612b65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cdf9092919063ffffffff16565b8051909150156128765780806020019051810190612b839190615a86565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2b91815260200190565b6040516020818303038152906040529050919050565b6000612c6884612c52878686612cee565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ad35781612a67565b6000818312612ad35781612a67565b6000612a67670de0b6b3a764000083612cc68661376c565b612cd09190615c86565b612cda9190615baa565b6139b0565b6060612a648484600085613bef565b60606000845111612d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d6684613d85565b90506000612d7386613e71565b9050600084604051602001612d8a91815260200190565b60405160208183030381529060405290506000805b84518110156136e3576000858281518110612dbc57612dbc615f4d565b602002602001015190508451831115612e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f105780518051602091820120604051612ea592612e7f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b613067565b805151602011612fc65780518051602091820120604051612f3a92612e7f92910190815260200190565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b805184516020808701919091208251919092012014613067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b613073601060016158a8565b8160200151510361324f57845183036131e7576130ad81602001516010815181106130a0576130a0615f4d565b6020026020010151613ed4565b96506000875111613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b6001865161314e9190615b08565b82146131dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a67565b60008584815181106131fb576131fb615f4d565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061322657613226615f4d565b6020026020010151905061323981614034565b95506132466001866158a8565b945050506136d0565b60028160200151510361364857600061326782614059565b905060008160008151811061327e5761327e615f4d565b016020015160f81c90506000613295600283615f7c565b6132a0906002615f9e565b905060006132b1848360ff1661407d565b905060006132bf8a8961407d565b905060006132cd83836140b3565b90508083511461335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff851660021480613374575060ff85166003145b156135635780825114613409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61342387602001516001815181106130a0576130a0615f4d565b9c5060008d51116134b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134c49190615b08565b8814613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a67565b60ff85161580613576575060ff85166001145b156135b5576135a2876020015160018151811061359557613595615f4d565b6020026020010151614034565b99506135ae818a6158a8565b985061363d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136d0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136db81615f15565b915050612d9f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137e484614167565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139e157506000919050565b680755bf798b4a1bf1e58212613a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d289190615fc1565b60006040518083038185875af1925050503d8060008114613d65576040519150601f19603f3d011682016040523d82523d6000602084013e613d6a565b606091505b5091509150613d7a82828661423d565b979650505050505050565b80516060908067ffffffffffffffff811115613da357613da361532d565b604051908082528060200260200182016040528015613de857816020015b6040805180820190915260608082526020820152815260200190600190039081613dc15790505b50915060005b81811015613e6a576040518060400160405280858381518110613e1357613e13615f4d565b60200260200101518152602001613e42868481518110613e3557613e35615f4d565b6020026020010151614290565b815250838281518110613e5757613e57615f4d565b6020908102919091010152600101613dee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec9578060011b82018184015160001a8060041c8253600f811660018301535050600101613e9b565b509295945050505050565b60606000806000613ee4856142a3565b919450925090506000816001811115613eff57613eff615fdd565b14613f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f9682846158a8565b855114614025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6885602001518484614d10565b606060208260000151106140505761404b82613ed4565b61113e565b61113e82614da4565b606061113e61407883602001516000815181106130a0576130a0615f4d565b613e71565b60608251821061409c575060408051602081019091526000815261113e565b612a6783838486516140ae9190615b08565b614dba565b60008082518451106140c65782516140c9565b83515b90505b808210801561415057508282815181106140e8576140e8615f4d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061412757614127615f4d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614160578160010191506140cc565b5092915050565b60008082116141d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561424c575081612a67565b82511561425c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156bf565b606061113e61429e83614f92565b61507b565b600080600080846000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f8111614386576000600160009450945094505050614d09565b60b7811161459457600061439b608083615b08565b905080876000015111614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144cf57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d09915050565b60bf81116148e25760006145a960b783615b08565b905080876000015111614664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61481081846158a8565b8951116148c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148d08360016158a8565b9750955060009450614d099350505050565b60f781116149c35760006148f760c083615b08565b9050808760000151116149b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d09915050565b60006149d060f783615b08565b905080876000015111614a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c3781846158a8565b895111614cec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cf78360016158a8565b9750955060019450614d099350505050565b9193909250565b60608167ffffffffffffffff811115614d2b57614d2b61532d565b6040519080825280601f01601f191660200182016040528015614d55576020820181803683370190505b5090508115612a67576000614d6a84866158a8565b90506020820160005b84811015614d8b578281015182820152602001614d73565b84811115614d9a576000858301525b5050509392505050565b606061113e826020015160008460000151614d10565b60608182601f011015614e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f215760405191506000825260208201604052614f89565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f5a578051835260209283019201614f42565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161505d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b6060600080600061508b856142a3565b9194509250905060018160018111156150a6576150a6615fdd565b14615133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513f83856158a8565b146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151e35790505093506000835b86518110156152d1576000806152566040518060400160405280858c6000015161523a9190615b08565b8152602001858c6020015161524f91906158a8565b90526142a3565b50915091506040518060400160405280838361527291906158a8565b8152602001848b6020015161528791906158a8565b81525088858151811061529c5761529c615f4d565b60209081029190910101526152b26001856158a8565b93506152be81836158a8565b6152c890846158a8565b92505050615210565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152ff57600080fd5b50565b803567ffffffffffffffff8116811461531a57600080fd5b919050565b80151581146152ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153a3576153a361532d565b604052919050565b600082601f8301126153bc57600080fd5b813567ffffffffffffffff8111156153d6576153d661532d565b61540760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161535c565b81815284602083860101111561541c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561545257600080fd5b863561545d816152dd565b9550602087013594506040870135935061547960608801615302565b925060808701356154898161531f565b915060a087013567ffffffffffffffff8111156154a557600080fd5b6154b189828a016153ab565b9150509295509295509295565b600060c082840312156154d057600080fd5b60405160c0810167ffffffffffffffff82821081831117156154f4576154f461532d565b81604052829350843583526020850135915061550f826152dd565b81602084015260408501359150615525826152dd565b816040840152606085013560608401526080850135608084015260a085013591508082111561555357600080fd5b50615560858286016153ab565b60a0830152505092915050565b600080600080600085870360e081121561558657600080fd5b863567ffffffffffffffff8082111561559e57600080fd5b6155aa8a838b016154be565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155e357600080fd5b60408901955060c08901359250808311156155fd57600080fd5b828901925089601f84011261561157600080fd5b823591508082111561562257600080fd5b508860208260051b840101111561563857600080fd5b959894975092955050506020019190565b60005b8381101561566457818101518382015260200161564c565b838111156120995750506000910152565b6000815180845261568d816020860160208601615649565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a676020830184615675565b6000602082840312156156e457600080fd5b5035919050565b60ff811681146152ff57600080fd5b6000806000806080858703121561571057600080fd5b843561571b816152dd565b9350602085013561572b816156eb565b93969395505050506040820135916060013590565b60006020828403121561575257600080fd5b813567ffffffffffffffff81111561576957600080fd5b615775848285016154be565b949350505050565b60006020828403121561578f57600080fd5b612a6782615302565b6000806000606084860312156157ad57600080fd5b83356157b8816152dd565b925060208401356157c8816152dd565b915060408401356157d8816152dd565b809150509250925092565b600080600080600060a086880312156157fb57600080fd5b8535615806816152dd565b94506020860135935061581b60408701615302565b9250606086013561582b8161531f565b9150608086013567ffffffffffffffff81111561584757600080fd5b615853888289016153ab565b9150509295509295909350565b60006020828403121561587257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158bb576158bb615879565b500190565b600080604083850312156158d357600080fd5b82516158de816152dd565b60208401519092506158ef816156eb565b809150509250929050565b60006020828403121561590c57600080fd5b8151612a67816152dd565b80516fffffffffffffffffffffffffffffffff8116811461531a57600080fd5b60006060828403121561594957600080fd5b6040516060810181811067ffffffffffffffff8211171561596c5761596c61532d565b6040528251815261597f60208401615917565b602082015261599060408401615917565b60408201529392505050565b6000608082840312156159ae57600080fd5b6040516080810181811067ffffffffffffffff821117156159d1576159d161532d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1d57615a1d61532d565b8360051b6020615a2e81830161535c565b868152918501918181019036841115615a4657600080fd5b865b84811015615a7a57803586811115615a605760008081fd5b615a6c36828b016153ab565b845250918301918301615a48565b50979650505050505050565b600060208284031215615a9857600080fd5b8151612a678161531f565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615af7816049850160208701615649565b919091016049019695505050505050565b600082821015615b1a57615b1a615879565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b4657615b46615879565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b7257615b72615879565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb957615bb9615b7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0d57615c0d615879565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4c57615c4c615879565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c8057615c80615879565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cc757615cc7615879565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615d0257615d02615879565b60008712925087820587128484161615615d1e57615d1e615879565b87850587128184161615615d3457615d34615879565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7c57615d7c615879565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615db057615db0615879565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615dee57615dee615879565b500290565b600082615e0257615e02615b7b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e5260c0830184615675565b98975050505050505050565b805163ffffffff8116811461531a57600080fd5b600060c08284031215615e8457600080fd5b60405160c0810181811067ffffffffffffffff82111715615ea757615ea761532d565b604052615eb383615e5e565b81526020830151615ec3816156eb565b60208201526040830151615ed6816156eb565b6040820152615ee760608401615e5e565b6060820152615ef860808401615e5e565b6080820152615f0960a08401615917565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f4657615f46615879565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8f57615f8f615b7b565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb857615fb8615879565b90039392505050565b60008251615fd3818460208701615649565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3340,7 +3340,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3348,7 +3348,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3356,7 +3356,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3364,7 +3364,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3372,7 +3372,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3380,7 +3380,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3388,7 +3388,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3396,7 +3396,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3404,7 +3404,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3412,7 +3412,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3420,7 +3420,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3428,7 +3428,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3436,7 +3436,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3444,7 +3444,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3452,7 +3452,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3460,7 +3460,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3468,7 +3468,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3476,7 +3476,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": true, "newValue": "0x000000000000000100000000000000000000000000000000000000003b9aca00", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3484,7 +3484,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3492,7 +3492,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3564,7 +3564,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3578,7 +3578,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3590,7 +3590,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3604,7 +3604,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3616,7 +3616,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3630,7 +3630,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3642,7 +3642,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3656,7 +3656,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -11095,7 +11095,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d58900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11121,7 +11121,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d58900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -11187,7 +11187,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b800000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d58900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11221,7 +11221,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef2860000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef28600000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d58900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11240,7 +11240,7 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": true, - "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -11250,7 +11250,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11444,8 +11444,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", - "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11454,7 +11454,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11530,8 +11530,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", - "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11540,7 +11540,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11582,8 +11582,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", - "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11592,7 +11592,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11634,8 +11634,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", - "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11644,7 +11644,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11738,8 +11738,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", - "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11748,7 +11748,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11842,8 +11842,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", - "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11852,7 +11852,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11946,8 +11946,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", - "previousValue": "0x0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8", + "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11956,7 +11956,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x2541C7F364B08aEb5362f263A2f8aF479aC716B8", + "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", "chainInfo": { "chainId": 31337, "forkId": 0 diff --git a/packages/contracts-bedrock/src/L1/OptimismPortal.sol b/packages/contracts-bedrock/src/L1/OptimismPortal.sol index 6bb8dcd26b2..99e81d4cc9d 100644 --- a/packages/contracts-bedrock/src/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/src/L1/OptimismPortal.sol @@ -71,9 +71,9 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { /// @custom:network-specific SystemConfig public systemConfig; - /// @notice The total amount of gas paying asset in the contract. Incremented and decremented on deposits - /// and withdrawals when custom gas token is used. This represents the number of units minted in the - /// L2 units must be scaled appropriately. + /// @notice The total amount of gas paying asset in the L2. Incremented on deposits and + /// decremented on withdrawals. Mey be larger than the amount of gas paying asset + /// for L2s that use ether to buy gas. uint256 internal _balance; /// @notice Emitted when a transaction is deposited from L1 to L2. @@ -136,6 +136,16 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { __ResourceMetering_init(); } + /// @notice Getter for the balance. + function balance() public view returns (uint256) { + (address token,) = gasPayingToken(); + if (token == Constants.ETHER) { + return address(this).balance; + } else { + return _balance; + } + } + /// @notice Getter function for the address of the guardian. /// Public getter is legacy and will be removed in the future. Use `SuperchainConfig.guardian()` instead. /// @return Address of the guardian. @@ -161,16 +171,6 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { return _byteCount * 16 + 21000; } - /// @notice Retuns the balance of the contract. - function balance() public view returns (uint256) { - (address token,) = gasPayingToken(); - if (token == Constants.ETHER) { - return address(this).balance; - } else { - return _balance; - } - } - /// @notice Accepts value so that users can send ETH directly to this contract and have the /// funds be deposited to their address on L2. This is intended as a convenience /// function for EOAs. Contracts should call the depositTransaction() function directly @@ -363,13 +363,12 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { // Only transfer value when a non zero value is specified. This saves gas in the case of // using the standard bridge or arbitrary message passing. if (_tx.value != 0) { + // Update the contracts internal accounting of the amount of native asset in L2. + _balance -= _tx.value; + // Read the balance of the target contract before the transfer so the consistency // of the transfer can be checked afterwards. - uint256 balanceOf = IERC20(token).balanceOf(address(this)); - - // Update the contracts internal accounting. Do not use the scaled value as this - // is tracking the number of units that are minted in the L2. - _balance -= _tx.value; + uint256 startBalance = IERC20(token).balanceOf(address(this)); // Transfer the ERC20 balance to the target, accounting for non standard ERC20 // implementations that may not return a boolean. This reverts if the low level @@ -377,7 +376,7 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { IERC20(token).safeTransfer({ to: _tx.target, value: _tx.value }); // The balance must be transferred exactly. - if (IERC20(token).balanceOf(address(this)) != balanceOf - _tx.value) { + if (IERC20(token).balanceOf(address(this)) != startBalance - _tx.value) { revert TransferFailed(); } } @@ -425,22 +424,20 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { { // Can only be called if an ERC20 token is used for gas paying on L2 (address token,) = gasPayingToken(); - if (token == Constants.ETHER) { - revert OnlyCustomGasToken(); - } + if (token == Constants.ETHER) revert OnlyCustomGasToken(); // Get the balance of the portal before the transfer. - uint256 balanceOf = IERC20(token).balanceOf(address(this)); + uint256 startBalance = IERC20(token).balanceOf(address(this)); // Take ownership of the token. It is assumed that the user has given the portal an approval. IERC20(token).safeTransferFrom({ from: msg.sender, to: address(this), value: _mint }); // Double check that the portal now has the exact amount of token. - if (IERC20(token).balanceOf(address(this)) != balanceOf + _mint) { + if (IERC20(token).balanceOf(address(this)) != startBalance + _mint) { revert TransferFailed(); } - // Overflow protection here ensures safety on L2 from overflows in balance. + // Gives overflow protection for L2 account balances. _balance += _mint; _depositTransaction({ @@ -474,9 +471,7 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { metered(_gasLimit) { (address token,) = gasPayingToken(); - if (token != Constants.ETHER && msg.value != 0) { - revert NoValue(); - } + if (token != Constants.ETHER && msg.value != 0) revert NoValue(); _depositTransaction({ _to: _to, @@ -538,11 +533,9 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { /// @notice Sets the gas paying token for the L2 system. This token is used as the /// L2 native asset. Only the SystemConfig contract can call this function. function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) external { - if (msg.sender != address(systemConfig)) { - revert Unauthorized(); - } + if (msg.sender != address(systemConfig)) revert Unauthorized(); - // Set L2 deposit gas as used without paying burning gas. + // Set L2 deposit gas as used without paying burning gas. Ensures that desposits cannot use too much L2 gas. useGas(80000); // Emit the special deposit transaction directly that sets the gas paying diff --git a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol index 4c745905954..51d29e946c5 100644 --- a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol @@ -304,7 +304,7 @@ contract L2CrossDomainMessenger_Test is Bridge_Initializer { vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); assertTrue(l2CrossDomainMessenger.isCustomGasToken()); - vm.expectRevert("CrossDomainMessenger: value must be zero unless message is from a system address"); + vm.expectRevert("CrossDomainMessenger: cannot send value with custom gas token"); l2CrossDomainMessenger.sendMessage{ value: 1 }(recipient, hex"ff", uint32(100)); } @@ -345,17 +345,18 @@ contract L2CrossDomainMessenger_Test is Bridge_Initializer { } /// @dev Tests that the relayMessage reverts when call value is non-zero with custom gas token. + /// The L1CrossDomainMessenger `sendMessage` function cannot send value with a custom gas token. function test_relayMessage_customGasToken_withValue_reverts() external virtual { // Mock the gasPayingToken function to return a custom gas token vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); assertTrue(l2CrossDomainMessenger.isCustomGasToken()); - vm.expectRevert("CrossDomainMessenger: cannot relay value with custom gas token"); + vm.expectRevert("CrossDomainMessenger: value must be zero unless message is from a system address"); l2CrossDomainMessenger.relayMessage{ value: 1 }( Encoding.encodeVersionedNonce({ _nonce: 0, _version: 1 }), address(0xabcd), address(0xabcd), - 0, // value + 1, // value 0, hex"1111" ); diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index 7b732d013a3..4179cf6ae3d 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -21,7 +21,7 @@ contract DeploymentSummary is DeploymentSummaryCode { address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; - address internal constant optimismPortalAddress = 0x2541C7F364B08aEb5362f263A2f8aF479aC716B8; + address internal constant optimismPortalAddress = 0x65fd054Ab5dae428925dfA1538570e9fF455d589; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; @@ -437,7 +437,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"000000000000000000000000000000000000000000000000000000000000000a"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"0000000000000000000000002541c7f364b08aeb5362f263a2f8af479ac716b8"; + value = hex"00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index cd5b65fd5a0..0ca2ef2bf12 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -35,7 +35,7 @@ contract DeploymentSummaryCode { bytes internal constant l1ERC721BridgeProxyCode = hex"60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a"; bytes internal constant optimismPortalCode = - hex"60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615431565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b6366004615565565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156b7565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156ca565b611089565b34801561036257600080fd5b506101936103713660046156f2565b611144565b34801561038257600080fd5b50610193610391366004615738565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156ca565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b366004615775565b611dd6565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611def565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615790565b611e49565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156ca565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157db565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120b3565b50610673828261225f565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615858565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c61252c565b6107bd89826158a0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615858565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a0565b909155506108a890508a8a8a8a8a8a6120b3565b50506108b4828261225f565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158b8565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158f2565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a919061592f565b519050610ba4610b9f36869003860186615994565b612608565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d87612664565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061592f565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a6159fa565b8a60400135612694565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a7e565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061592f565b602001516fffffffffffffffffffffffffffffffff166126b8565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a16201388061275e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156b7565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f982612664565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615858565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126b8565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061592f565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126b8565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127ba565b9150611d1f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cf6576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd89190615858565b9050866060015160386000828254611bf09190615b00565b909155505060408701516060880151611c209173ffffffffffffffffffffffffffffffffffffffff851691612818565b6060870151611c2f9082615b00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190615858565b14611cf4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d1a57611acd8660400151876080015160008960a001516127ba565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8190851515815260200190565b60405180910390a281158015611d975750326001145b15611dce576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611de3826010615b17565b61113e90615208615b47565b600080611dfa6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e41574791505090565b505060385490565b600054610100900460ff1615808015611e695750600054600160ff909116105b80611e835750303b158015611e83575060005460ff166001145b611f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61202e612873565b801561209157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120d5575073ffffffffffffffffffffffffffffffffffffffff861615155b1561210c576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121168151611dd6565b67ffffffffffffffff168367ffffffffffffffff161015612163576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a1576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121c2575033731111000000000000000000000000000000001111015b600086868686866040516020016121dd959493929190615a9b565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161224d91906156b7565b60405180910390a45050505050505050565b600154600090612295907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b00565b905060006122a1612986565b90506000816020015160ff16826000015163ffffffff166122c29190615ba2565b905082156123f9576001546000906122f9908390700100000000000000000000000000000000900467ffffffffffffffff16615c0a565b90506000836040015160ff16836123109190615c7e565b6001546123309084906fffffffffffffffffffffffffffffffff16615c7e565b61233a9190615ba2565b60015490915060009061238b906123649084906fffffffffffffffffffffffffffffffff16615d3a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a47565b905060018611156123ba576123b761236482876040015160ff1660018a6123b29190615b00565b612a66565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061242c908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124b9576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124e5906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615dae565b905060006124f748633b9aca00612abb565b6125019083615deb565b905060005a6125109088615b00565b9050808211156108b4576108b46125278284615b00565b612ad2565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120919085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612afb565b60008160000151826020015183604001518460600151604051602001612647949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612647979096959101615dff565b6000806126a086612c07565b90506126ae81868686612c39565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190615858565b61275690836158a0565b421192915050565b60018054829190601090612791908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127ca866000612c69565b905080612800576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261286e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612586565b505050565b600054610100900460ff1661290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e6a565b6000612a5c612a568585612c87565b83612c97565b90505b9392505050565b6000670de0b6b3a7640000612aa7612a7e8583615ba2565b612a9090670de0b6b3a7640000615c0a565b612aa285670de0b6b3a7640000615c7e565b612ca6565b612ab19086615c7e565b612a5c9190615ba2565b600081831015612acb5781612a5f565b5090919050565b6000805a90505b825a612ae59083615b00565b101561286e57612af482615f0d565b9150612ad9565b6000612b5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cd79092919063ffffffff16565b80519091501561286e5780806020019051810190612b7b9190615a7e565b61286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2391815260200190565b6040516020818303038152906040529050919050565b6000612c6084612c4a878686612ce6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612acb5781612a5f565b6000818312612acb5781612a5f565b6000612a5f670de0b6b3a764000083612cbe86613764565b612cc89190615c7e565b612cd29190615ba2565b6139a8565b6060612a5c8484600085613be7565b60606000845111612d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d5e84613d7d565b90506000612d6b86613e69565b9050600084604051602001612d8291815260200190565b60405160208183030381529060405290506000805b84518110156136db576000858281518110612db457612db4615f45565b602002602001015190508451831115612e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f085780518051602091820120604051612e9d92612e7792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b61305f565b805151602011612fbe5780518051602091820120604051612f3292612e7792910190815260200190565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b80518451602080870191909120825191909201201461305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b61306b601060016158a0565b8160200151510361324757845183036131df576130a5816020015160108151811061309857613098615f45565b6020026020010151613ecc565b96506000875111613138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b600186516131469190615b00565b82146131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a5f565b60008584815181106131f3576131f3615f45565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061321e5761321e615f45565b602002602001015190506132318161402c565b955061323e6001866158a0565b945050506136c8565b60028160200151510361364057600061325f82614051565b905060008160008151811061327657613276615f45565b016020015160f81c9050600061328d600283615f74565b613298906002615f96565b905060006132a9848360ff16614075565b905060006132b78a89614075565b905060006132c583836140ab565b905080835114613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff85166002148061336c575060ff85166003145b1561355b5780825114613401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61341b876020015160018151811061309857613098615f45565b9c5060008d51116134ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134bc9190615b00565b881461354a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a5f565b60ff8516158061356e575060ff85166001145b156135ad5761359a876020015160018151811061358d5761358d615f45565b602002602001015161402c565b99506135a6818a6158a0565b9850613635565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136c8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136d381615f0d565b915050612d97565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137dc8461415f565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139d957506000919050565b680755bf798b4a1bf1e58212613a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d209190615fb9565b60006040518083038185875af1925050503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b5091509150613d72828286614235565b979650505050505050565b80516060908067ffffffffffffffff811115613d9b57613d9b615325565b604051908082528060200260200182016040528015613de057816020015b6040805180820190915260608082526020820152815260200190600190039081613db95790505b50915060005b81811015613e62576040518060400160405280858381518110613e0b57613e0b615f45565b60200260200101518152602001613e3a868481518110613e2d57613e2d615f45565b6020026020010151614288565b815250838281518110613e4f57613e4f615f45565b6020908102919091010152600101613de6565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec1578060011b82018184015160001a8060041c8253600f811660018301535050600101613e93565b509295945050505050565b60606000806000613edc8561429b565b919450925090506000816001811115613ef757613ef7615fd5565b14613f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f8e82846158a0565b85511461401d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6085602001518484614d08565b606060208260000151106140485761404382613ecc565b61113e565b61113e82614d9c565b606061113e614070836020015160008151811061309857613098615f45565b613e69565b606082518210614094575060408051602081019091526000815261113e565b612a5f83838486516140a69190615b00565b614db2565b60008082518451106140be5782516140c1565b83515b90505b808210801561414857508282815181106140e0576140e0615f45565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411f5761411f615f45565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614158578160010191506140c4565b5092915050565b60008082116141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614244575081612a5f565b8251156142545782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156b7565b606061113e61429683614f8a565b615073565b600080600080846000015111614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f811161437e576000600160009450945094505050614d01565b60b7811161458c576000614393608083615b00565b90508087600001511161444e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144c757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d01915050565b60bf81116148da5760006145a160b783615b00565b90508087600001511161465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361473a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c603781116147fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61480881846158a0565b8951116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148c88360016158a0565b9750955060009450614d019350505050565b60f781116149bb5760006148ef60c083615b00565b9050808760000151116149aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d01915050565b60006149c860f783615b00565b905080876000015111614a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c2f81846158a0565b895111614ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cef8360016158a0565b9750955060019450614d019350505050565b9193909250565b60608167ffffffffffffffff811115614d2357614d23615325565b6040519080825280601f01601f191660200182016040528015614d4d576020820181803683370190505b5090508115612a5f576000614d6284866158a0565b90506020820160005b84811015614d83578281015182820152602001614d6b565b84811115614d92576000858301525b5050509392505050565b606061113e826020015160008460000151614d08565b60608182601f011015614e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f195760405191506000825260208201604052614f81565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f52578051835260209283019201614f3a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111615055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b606060008060006150838561429b565b91945092509050600181600181111561509e5761509e615fd5565b1461512b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513783856158a0565b146151c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151db5790505093506000835b86518110156152c95760008061524e6040518060400160405280858c600001516152329190615b00565b8152602001858c6020015161524791906158a0565b905261429b565b50915091506040518060400160405280838361526a91906158a0565b8152602001848b6020015161527f91906158a0565b81525088858151811061529457615294615f45565b60209081029190910101526152aa6001856158a0565b93506152b681836158a0565b6152c090846158a0565b92505050615208565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152f757600080fd5b50565b803567ffffffffffffffff8116811461531257600080fd5b919050565b80151581146152f757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561539b5761539b615325565b604052919050565b600082601f8301126153b457600080fd5b813567ffffffffffffffff8111156153ce576153ce615325565b6153ff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615354565b81815284602083860101111561541457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561544a57600080fd5b8635615455816152d5565b95506020870135945060408701359350615471606088016152fa565b9250608087013561548181615317565b915060a087013567ffffffffffffffff81111561549d57600080fd5b6154a989828a016153a3565b9150509295509295509295565b600060c082840312156154c857600080fd5b60405160c0810167ffffffffffffffff82821081831117156154ec576154ec615325565b816040528293508435835260208501359150615507826152d5565b8160208401526040850135915061551d826152d5565b816040840152606085013560608401526080850135608084015260a085013591508082111561554b57600080fd5b50615558858286016153a3565b60a0830152505092915050565b600080600080600085870360e081121561557e57600080fd5b863567ffffffffffffffff8082111561559657600080fd5b6155a28a838b016154b6565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155db57600080fd5b60408901955060c08901359250808311156155f557600080fd5b828901925089601f84011261560957600080fd5b823591508082111561561a57600080fd5b508860208260051b840101111561563057600080fd5b959894975092955050506020019190565b60005b8381101561565c578181015183820152602001615644565b838111156120915750506000910152565b60008151808452615685816020860160208601615641565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a5f602083018461566d565b6000602082840312156156dc57600080fd5b5035919050565b60ff811681146152f757600080fd5b6000806000806080858703121561570857600080fd5b8435615713816152d5565b93506020850135615723816156e3565b93969395505050506040820135916060013590565b60006020828403121561574a57600080fd5b813567ffffffffffffffff81111561576157600080fd5b61576d848285016154b6565b949350505050565b60006020828403121561578757600080fd5b612a5f826152fa565b6000806000606084860312156157a557600080fd5b83356157b0816152d5565b925060208401356157c0816152d5565b915060408401356157d0816152d5565b809150509250925092565b600080600080600060a086880312156157f357600080fd5b85356157fe816152d5565b945060208601359350615813604087016152fa565b9250606086013561582381615317565b9150608086013567ffffffffffffffff81111561583f57600080fd5b61584b888289016153a3565b9150509295509295909350565b60006020828403121561586a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158b3576158b3615871565b500190565b600080604083850312156158cb57600080fd5b82516158d6816152d5565b60208401519092506158e7816156e3565b809150509250929050565b60006020828403121561590457600080fd5b8151612a5f816152d5565b80516fffffffffffffffffffffffffffffffff8116811461531257600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964615325565b604052825181526159776020840161590f565b60208201526159886040840161590f565b60408201529392505050565b6000608082840312156159a657600080fd5b6040516080810181811067ffffffffffffffff821117156159c9576159c9615325565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1557615a15615325565b8360051b6020615a26818301615354565b868152918501918181019036841115615a3e57600080fd5b865b84811015615a7257803586811115615a585760008081fd5b615a6436828b016153a3565b845250918301918301615a40565b50979650505050505050565b600060208284031215615a9057600080fd5b8151612a5f81615317565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615aef816049850160208701615641565b919091016049019695505050505050565b600082821015615b1257615b12615871565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b3e57615b3e615871565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b6a57615b6a615871565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb157615bb1615b73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0557615c05615871565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4457615c44615871565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c7857615c78615871565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615871565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615871565b60008712925087820587128484161615615d1657615d16615871565b87850587128184161615615d2c57615d2c615871565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7457615d74615871565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615da857615da8615871565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615de657615de6615871565b500290565b600082615dfa57615dfa615b73565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e4a60c083018461566d565b98975050505050505050565b805163ffffffff8116811461531257600080fd5b600060c08284031215615e7c57600080fd5b60405160c0810181811067ffffffffffffffff82111715615e9f57615e9f615325565b604052615eab83615e56565b81526020830151615ebb816156e3565b60208201526040830151615ece816156e3565b6040820152615edf60608401615e56565b6060820152615ef060808401615e56565b6080820152615f0160a0840161590f565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f3e57615f3e615871565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8757615f87615b73565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb057615fb0615871565b90039392505050565b60008251615fcb818460208701615641565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; + hex"60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615439565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b636600461556d565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156bf565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156d2565b611089565b34801561036257600080fd5b506101936103713660046156fa565b611144565b34801561038257600080fd5b50610193610391366004615740565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156d2565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b36600461577d565b611dde565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611df7565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615798565b611e51565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156d2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157e3565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120bb565b506106738282612267565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615860565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612534565b6107bd89826158a8565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615860565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a8565b909155506108a890508a8a8a8a8a8a6120bb565b50506108b48282612267565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158c0565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158fa565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190615937565b519050610ba4610b9f3686900386018661599c565b612610565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d8761266c565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190615937565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a615a02565b8a6040013561269c565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a86565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190615937565b602001516fffffffffffffffffffffffffffffffff166126c0565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a162013880612766565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615aa3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156bf565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f98261266c565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615860565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126c0565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190615937565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126c0565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127c2565b9150611d27565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cfe57856060015160386000828254611b5d9190615b08565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190615860565b9050611c28876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166128209092919063ffffffff16565b6060870151611c379082615b08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615860565b14611cfc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d2257611acd8660400151876080015160008960a001516127c2565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8990851515815260200190565b60405180910390a281158015611d9f5750326001145b15611dd6576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611deb826010615b1f565b61113e90615208615b4f565b600080611e026108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e49574791505090565b505060385490565b600054610100900460ff1615808015611e715750600054600160ff909116105b80611e8b5750303b158015611e8b575060005460ff166001145b611f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f7557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61203661287b565b801561209957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120dd575073ffffffffffffffffffffffffffffffffffffffff861615155b15612114576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211e8151611dde565b67ffffffffffffffff168367ffffffffffffffff16101561216b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121ca575033731111000000000000000000000000000000001111015b600086868686866040516020016121e5959493929190615aa3565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225591906156bf565b60405180910390a45050505050505050565b60015460009061229d907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b08565b905060006122a961298e565b90506000816020015160ff16826000015163ffffffff166122ca9190615baa565b9050821561240157600154600090612301908390700100000000000000000000000000000000900467ffffffffffffffff16615c12565b90506000836040015160ff16836123189190615c86565b6001546123389084906fffffffffffffffffffffffffffffffff16615c86565b6123429190615baa565b6001549091506000906123939061236c9084906fffffffffffffffffffffffffffffffff16615d42565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a4f565b905060018611156123c2576123bf61236c82876040015160ff1660018a6123ba9190615b08565b612a6e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612434908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124c1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124ed906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615db6565b905060006124ff48633b9aca00612ac3565b6125099083615df3565b905060005a6125189088615b08565b9050808211156108b4576108b461252f8284615b08565b612ada565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120999085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b03565b6000816000015182602001518360400151846060015160405160200161264f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a0880151935160009761264f979096959101615e07565b6000806126a886612c0f565b90506126b681868686612c41565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615860565b61275e90836158a8565b421192915050565b60018054829190601090612799908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127d2866000612c71565b905080612808576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526128769084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161258e565b505050565b600054610100900460ff16612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e72565b6000612a64612a5e8585612c8f565b83612c9f565b90505b9392505050565b6000670de0b6b3a7640000612aaf612a868583615baa565b612a9890670de0b6b3a7640000615c12565b612aaa85670de0b6b3a7640000615c86565b612cae565b612ab99086615c86565b612a649190615baa565b600081831015612ad35781612a67565b5090919050565b6000805a90505b825a612aed9083615b08565b101561287657612afc82615f15565b9150612ae1565b6000612b65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cdf9092919063ffffffff16565b8051909150156128765780806020019051810190612b839190615a86565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2b91815260200190565b6040516020818303038152906040529050919050565b6000612c6884612c52878686612cee565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ad35781612a67565b6000818312612ad35781612a67565b6000612a67670de0b6b3a764000083612cc68661376c565b612cd09190615c86565b612cda9190615baa565b6139b0565b6060612a648484600085613bef565b60606000845111612d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d6684613d85565b90506000612d7386613e71565b9050600084604051602001612d8a91815260200190565b60405160208183030381529060405290506000805b84518110156136e3576000858281518110612dbc57612dbc615f4d565b602002602001015190508451831115612e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f105780518051602091820120604051612ea592612e7f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b613067565b805151602011612fc65780518051602091820120604051612f3a92612e7f92910190815260200190565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b805184516020808701919091208251919092012014613067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b613073601060016158a8565b8160200151510361324f57845183036131e7576130ad81602001516010815181106130a0576130a0615f4d565b6020026020010151613ed4565b96506000875111613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b6001865161314e9190615b08565b82146131dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a67565b60008584815181106131fb576131fb615f4d565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061322657613226615f4d565b6020026020010151905061323981614034565b95506132466001866158a8565b945050506136d0565b60028160200151510361364857600061326782614059565b905060008160008151811061327e5761327e615f4d565b016020015160f81c90506000613295600283615f7c565b6132a0906002615f9e565b905060006132b1848360ff1661407d565b905060006132bf8a8961407d565b905060006132cd83836140b3565b90508083511461335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff851660021480613374575060ff85166003145b156135635780825114613409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61342387602001516001815181106130a0576130a0615f4d565b9c5060008d51116134b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134c49190615b08565b8814613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a67565b60ff85161580613576575060ff85166001145b156135b5576135a2876020015160018151811061359557613595615f4d565b6020026020010151614034565b99506135ae818a6158a8565b985061363d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136d0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136db81615f15565b915050612d9f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137e484614167565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139e157506000919050565b680755bf798b4a1bf1e58212613a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d289190615fc1565b60006040518083038185875af1925050503d8060008114613d65576040519150601f19603f3d011682016040523d82523d6000602084013e613d6a565b606091505b5091509150613d7a82828661423d565b979650505050505050565b80516060908067ffffffffffffffff811115613da357613da361532d565b604051908082528060200260200182016040528015613de857816020015b6040805180820190915260608082526020820152815260200190600190039081613dc15790505b50915060005b81811015613e6a576040518060400160405280858381518110613e1357613e13615f4d565b60200260200101518152602001613e42868481518110613e3557613e35615f4d565b6020026020010151614290565b815250838281518110613e5757613e57615f4d565b6020908102919091010152600101613dee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec9578060011b82018184015160001a8060041c8253600f811660018301535050600101613e9b565b509295945050505050565b60606000806000613ee4856142a3565b919450925090506000816001811115613eff57613eff615fdd565b14613f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f9682846158a8565b855114614025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6885602001518484614d10565b606060208260000151106140505761404b82613ed4565b61113e565b61113e82614da4565b606061113e61407883602001516000815181106130a0576130a0615f4d565b613e71565b60608251821061409c575060408051602081019091526000815261113e565b612a6783838486516140ae9190615b08565b614dba565b60008082518451106140c65782516140c9565b83515b90505b808210801561415057508282815181106140e8576140e8615f4d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061412757614127615f4d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614160578160010191506140cc565b5092915050565b60008082116141d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561424c575081612a67565b82511561425c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156bf565b606061113e61429e83614f92565b61507b565b600080600080846000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f8111614386576000600160009450945094505050614d09565b60b7811161459457600061439b608083615b08565b905080876000015111614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144cf57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d09915050565b60bf81116148e25760006145a960b783615b08565b905080876000015111614664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61481081846158a8565b8951116148c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148d08360016158a8565b9750955060009450614d099350505050565b60f781116149c35760006148f760c083615b08565b9050808760000151116149b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d09915050565b60006149d060f783615b08565b905080876000015111614a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c3781846158a8565b895111614cec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cf78360016158a8565b9750955060019450614d099350505050565b9193909250565b60608167ffffffffffffffff811115614d2b57614d2b61532d565b6040519080825280601f01601f191660200182016040528015614d55576020820181803683370190505b5090508115612a67576000614d6a84866158a8565b90506020820160005b84811015614d8b578281015182820152602001614d73565b84811115614d9a576000858301525b5050509392505050565b606061113e826020015160008460000151614d10565b60608182601f011015614e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f215760405191506000825260208201604052614f89565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f5a578051835260209283019201614f42565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161505d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b6060600080600061508b856142a3565b9194509250905060018160018111156150a6576150a6615fdd565b14615133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513f83856158a8565b146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151e35790505093506000835b86518110156152d1576000806152566040518060400160405280858c6000015161523a9190615b08565b8152602001858c6020015161524f91906158a8565b90526142a3565b50915091506040518060400160405280838361527291906158a8565b8152602001848b6020015161528791906158a8565b81525088858151811061529c5761529c615f4d565b60209081029190910101526152b26001856158a8565b93506152be81836158a8565b6152c890846158a8565b92505050615210565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152ff57600080fd5b50565b803567ffffffffffffffff8116811461531a57600080fd5b919050565b80151581146152ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153a3576153a361532d565b604052919050565b600082601f8301126153bc57600080fd5b813567ffffffffffffffff8111156153d6576153d661532d565b61540760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161535c565b81815284602083860101111561541c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561545257600080fd5b863561545d816152dd565b9550602087013594506040870135935061547960608801615302565b925060808701356154898161531f565b915060a087013567ffffffffffffffff8111156154a557600080fd5b6154b189828a016153ab565b9150509295509295509295565b600060c082840312156154d057600080fd5b60405160c0810167ffffffffffffffff82821081831117156154f4576154f461532d565b81604052829350843583526020850135915061550f826152dd565b81602084015260408501359150615525826152dd565b816040840152606085013560608401526080850135608084015260a085013591508082111561555357600080fd5b50615560858286016153ab565b60a0830152505092915050565b600080600080600085870360e081121561558657600080fd5b863567ffffffffffffffff8082111561559e57600080fd5b6155aa8a838b016154be565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155e357600080fd5b60408901955060c08901359250808311156155fd57600080fd5b828901925089601f84011261561157600080fd5b823591508082111561562257600080fd5b508860208260051b840101111561563857600080fd5b959894975092955050506020019190565b60005b8381101561566457818101518382015260200161564c565b838111156120995750506000910152565b6000815180845261568d816020860160208601615649565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a676020830184615675565b6000602082840312156156e457600080fd5b5035919050565b60ff811681146152ff57600080fd5b6000806000806080858703121561571057600080fd5b843561571b816152dd565b9350602085013561572b816156eb565b93969395505050506040820135916060013590565b60006020828403121561575257600080fd5b813567ffffffffffffffff81111561576957600080fd5b615775848285016154be565b949350505050565b60006020828403121561578f57600080fd5b612a6782615302565b6000806000606084860312156157ad57600080fd5b83356157b8816152dd565b925060208401356157c8816152dd565b915060408401356157d8816152dd565b809150509250925092565b600080600080600060a086880312156157fb57600080fd5b8535615806816152dd565b94506020860135935061581b60408701615302565b9250606086013561582b8161531f565b9150608086013567ffffffffffffffff81111561584757600080fd5b615853888289016153ab565b9150509295509295909350565b60006020828403121561587257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158bb576158bb615879565b500190565b600080604083850312156158d357600080fd5b82516158de816152dd565b60208401519092506158ef816156eb565b809150509250929050565b60006020828403121561590c57600080fd5b8151612a67816152dd565b80516fffffffffffffffffffffffffffffffff8116811461531a57600080fd5b60006060828403121561594957600080fd5b6040516060810181811067ffffffffffffffff8211171561596c5761596c61532d565b6040528251815261597f60208401615917565b602082015261599060408401615917565b60408201529392505050565b6000608082840312156159ae57600080fd5b6040516080810181811067ffffffffffffffff821117156159d1576159d161532d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1d57615a1d61532d565b8360051b6020615a2e81830161535c565b868152918501918181019036841115615a4657600080fd5b865b84811015615a7a57803586811115615a605760008081fd5b615a6c36828b016153ab565b845250918301918301615a48565b50979650505050505050565b600060208284031215615a9857600080fd5b8151612a678161531f565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615af7816049850160208701615649565b919091016049019695505050505050565b600082821015615b1a57615b1a615879565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b4657615b46615879565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b7257615b72615879565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb957615bb9615b7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0d57615c0d615879565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4c57615c4c615879565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c8057615c80615879565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cc757615cc7615879565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615d0257615d02615879565b60008712925087820587128484161615615d1e57615d1e615879565b87850587128184161615615d3457615d34615879565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7c57615d7c615879565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615db057615db0615879565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615dee57615dee615879565b500290565b600082615e0257615e02615b7b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e5260c0830184615675565b98975050505050505050565b805163ffffffff8116811461531a57600080fd5b600060c08284031215615e8457600080fd5b60405160c0810181811067ffffffffffffffff82111715615ea757615ea761532d565b604052615eb383615e5e565b81526020830151615ec3816156eb565b60208201526040830151615ed6816156eb565b6040820152615ee760608401615e5e565b6060820152615ef860808401615e5e565b6080820152615f0960a08401615917565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f4657615f46615879565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8f57615f8f615b7b565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb857615fb8615879565b90039392505050565b60008251615fd3818460208701615649565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; bytes internal constant l1CrossDomainMessengerCode = hex"6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant l2OutputOracleCode = From ba46d76abdc0b185365de4b55a793046522b0942 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 12 Apr 2024 18:47:20 -0600 Subject: [PATCH 12/45] op-bindings: regenerate --- op-bindings/bindings/optimismportal.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-bindings/bindings/optimismportal.go b/op-bindings/bindings/optimismportal.go index 9241a1cc1cf..91b57c6132d 100644 --- a/op-bindings/bindings/optimismportal.go +++ b/op-bindings/bindings/optimismportal.go @@ -49,7 +49,7 @@ type TypesWithdrawalTransaction struct { // OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract. var OptimismPortalMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"balance\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositERC20Transaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_mint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l2Oracle\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isOutputFinalized\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"paused_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provenWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2OutputIndex\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGasPayingToken\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_symbol\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LargeCalldata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoValue\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCustomGasToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SmallGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[]}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b620020971760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616011806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615431565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b6366004615565565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156b7565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156ca565b611089565b34801561036257600080fd5b506101936103713660046156f2565b611144565b34801561038257600080fd5b50610193610391366004615738565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156ca565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b366004615775565b611dd6565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611def565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615790565b611e49565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156ca565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157db565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120b3565b50610673828261225f565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615858565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c61252c565b6107bd89826158a0565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615858565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a0565b909155506108a890508a8a8a8a8a8a6120b3565b50506108b4828261225f565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158b8565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158f2565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a919061592f565b519050610ba4610b9f36869003860186615994565b612608565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d87612664565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061592f565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a6159fa565b8a60400135612694565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a7e565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611123919061592f565b602001516fffffffffffffffffffffffffffffffff166126b8565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a16201388061275e565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615a9b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156b7565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f982612664565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615858565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126b8565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc919061592f565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126b8565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127ba565b9150611d1f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cf6576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd89190615858565b9050866060015160386000828254611bf09190615b00565b909155505060408701516060880151611c209173ffffffffffffffffffffffffffffffffffffffff851691612818565b6060870151611c2f9082615b00565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cbd9190615858565b14611cf4576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d1a57611acd8660400151876080015160008960a001516127ba565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8190851515815260200190565b60405180910390a281158015611d975750326001145b15611dce576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611de3826010615b17565b61113e90615208615b47565b600080611dfa6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e41574791505090565b505060385490565b600054610100900460ff1615808015611e695750600054600160ff909116105b80611e835750303b158015611e83575060005460ff166001145b611f0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f6d57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61202e612873565b801561209157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120d5575073ffffffffffffffffffffffffffffffffffffffff861615155b1561210c576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6121168151611dd6565b67ffffffffffffffff168367ffffffffffffffff161015612163576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a1576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121c2575033731111000000000000000000000000000000001111015b600086868686866040516020016121dd959493929190615a9b565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161224d91906156b7565b60405180910390a45050505050505050565b600154600090612295907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b00565b905060006122a1612986565b90506000816020015160ff16826000015163ffffffff166122c29190615ba2565b905082156123f9576001546000906122f9908390700100000000000000000000000000000000900467ffffffffffffffff16615c0a565b90506000836040015160ff16836123109190615c7e565b6001546123309084906fffffffffffffffffffffffffffffffff16615c7e565b61233a9190615ba2565b60015490915060009061238b906123649084906fffffffffffffffffffffffffffffffff16615d3a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a47565b905060018611156123ba576123b761236482876040015160ff1660018a6123b29190615b00565b612a66565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061242c908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124b9576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124e5906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615dae565b905060006124f748633b9aca00612abb565b6125019083615deb565b905060005a6125109088615b00565b9050808211156108b4576108b46125278284615b00565b612ad2565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120919085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612afb565b60008160000151826020015183604001518460600151604051602001612647949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612647979096959101615dff565b6000806126a086612c07565b90506126ae81868686612c39565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274c9190615858565b61275690836158a0565b421192915050565b60018054829190601090612791908490700100000000000000000000000000000000900467ffffffffffffffff16615b47565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127ca866000612c69565b905080612800576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261286e9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612586565b505050565b600054610100900460ff1661290a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e6a565b6000612a5c612a568585612c87565b83612c97565b90505b9392505050565b6000670de0b6b3a7640000612aa7612a7e8583615ba2565b612a9090670de0b6b3a7640000615c0a565b612aa285670de0b6b3a7640000615c7e565b612ca6565b612ab19086615c7e565b612a5c9190615ba2565b600081831015612acb5781612a5f565b5090919050565b6000805a90505b825a612ae59083615b00565b101561286e57612af482615f0d565b9150612ad9565b6000612b5d826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cd79092919063ffffffff16565b80519091501561286e5780806020019051810190612b7b9190615a7e565b61286e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2391815260200190565b6040516020818303038152906040529050919050565b6000612c6084612c4a878686612ce6565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612acb5781612a5f565b6000818312612acb5781612a5f565b6000612a5f670de0b6b3a764000083612cbe86613764565b612cc89190615c7e565b612cd29190615ba2565b6139a8565b6060612a5c8484600085613be7565b60606000845111612d53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d5e84613d7d565b90506000612d6b86613e69565b9050600084604051602001612d8291815260200190565b60405160208183030381529060405290506000805b84518110156136db576000858281518110612db457612db4615f45565b602002602001015190508451831115612e4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f085780518051602091820120604051612e9d92612e7792910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b61305f565b805151602011612fbe5780518051602091820120604051612f3292612e7792910190815260200190565b612f03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b80518451602080870191909120825191909201201461305f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b61306b601060016158a0565b8160200151510361324757845183036131df576130a5816020015160108151811061309857613098615f45565b6020026020010151613ecc565b96506000875111613138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b600186516131469190615b00565b82146131d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a5f565b60008584815181106131f3576131f3615f45565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061321e5761321e615f45565b602002602001015190506132318161402c565b955061323e6001866158a0565b945050506136c8565b60028160200151510361364057600061325f82614051565b905060008160008151811061327657613276615f45565b016020015160f81c9050600061328d600283615f74565b613298906002615f96565b905060006132a9848360ff16614075565b905060006132b78a89614075565b905060006132c583836140ab565b905080835114613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff85166002148061336c575060ff85166003145b1561355b5780825114613401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61341b876020015160018151811061309857613098615f45565b9c5060008d51116134ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134bc9190615b00565b881461354a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a5f565b60ff8516158061356e575060ff85166001145b156135ad5761359a876020015160018151811061358d5761358d615f45565b602002602001015161402c565b99506135a6818a6158a0565b9850613635565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136c8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136d381615f0d565b915050612d97565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137dc8461415f565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139d957506000919050565b680755bf798b4a1bf1e58212613a4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d209190615fb9565b60006040518083038185875af1925050503d8060008114613d5d576040519150601f19603f3d011682016040523d82523d6000602084013e613d62565b606091505b5091509150613d72828286614235565b979650505050505050565b80516060908067ffffffffffffffff811115613d9b57613d9b615325565b604051908082528060200260200182016040528015613de057816020015b6040805180820190915260608082526020820152815260200190600190039081613db95790505b50915060005b81811015613e62576040518060400160405280858381518110613e0b57613e0b615f45565b60200260200101518152602001613e3a868481518110613e2d57613e2d615f45565b6020026020010151614288565b815250838281518110613e4f57613e4f615f45565b6020908102919091010152600101613de6565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec1578060011b82018184015160001a8060041c8253600f811660018301535050600101613e93565b509295945050505050565b60606000806000613edc8561429b565b919450925090506000816001811115613ef757613ef7615fd5565b14613f84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f8e82846158a0565b85511461401d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6085602001518484614d08565b606060208260000151106140485761404382613ecc565b61113e565b61113e82614d9c565b606061113e614070836020015160008151811061309857613098615f45565b613e69565b606082518210614094575060408051602081019091526000815261113e565b612a5f83838486516140a69190615b00565b614db2565b60008082518451106140be5782516140c1565b83515b90505b808210801561414857508282815181106140e0576140e0615f45565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061411f5761411f615f45565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614158578160010191506140c4565b5092915050565b60008082116141ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614244575081612a5f565b8251156142545782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156b7565b606061113e61429683614f8a565b615073565b600080600080846000015111614359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f811161437e576000600160009450945094505050614d01565b60b7811161458c576000614393608083615b00565b90508087600001511161444e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144c757507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d01915050565b60bf81116148da5760006145a160b783615b00565b90508087600001511161465c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361473a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c603781116147fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61480881846158a0565b8951116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148c88360016158a0565b9750955060009450614d019350505050565b60f781116149bb5760006148ef60c083615b00565b9050808760000151116149aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d01915050565b60006149c860f783615b00565b905080876000015111614a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c2f81846158a0565b895111614ce4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cef8360016158a0565b9750955060019450614d019350505050565b9193909250565b60608167ffffffffffffffff811115614d2357614d23615325565b6040519080825280601f01601f191660200182016040528015614d4d576020820181803683370190505b5090508115612a5f576000614d6284866158a0565b90506020820160005b84811015614d83578281015182820152602001614d6b565b84811115614d92576000858301525b5050509392505050565b606061113e826020015160008460000151614d08565b60608182601f011015614e21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f195760405191506000825260208201604052614f81565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f52578051835260209283019201614f3a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111615055576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b606060008060006150838561429b565b91945092509050600181600181111561509e5761509e615fd5565b1461512b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513783856158a0565b146151c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151db5790505093506000835b86518110156152c95760008061524e6040518060400160405280858c600001516152329190615b00565b8152602001858c6020015161524791906158a0565b905261429b565b50915091506040518060400160405280838361526a91906158a0565b8152602001848b6020015161527f91906158a0565b81525088858151811061529457615294615f45565b60209081029190910101526152aa6001856158a0565b93506152b681836158a0565b6152c090846158a0565b92505050615208565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152f757600080fd5b50565b803567ffffffffffffffff8116811461531257600080fd5b919050565b80151581146152f757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561539b5761539b615325565b604052919050565b600082601f8301126153b457600080fd5b813567ffffffffffffffff8111156153ce576153ce615325565b6153ff60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615354565b81815284602083860101111561541457600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561544a57600080fd5b8635615455816152d5565b95506020870135945060408701359350615471606088016152fa565b9250608087013561548181615317565b915060a087013567ffffffffffffffff81111561549d57600080fd5b6154a989828a016153a3565b9150509295509295509295565b600060c082840312156154c857600080fd5b60405160c0810167ffffffffffffffff82821081831117156154ec576154ec615325565b816040528293508435835260208501359150615507826152d5565b8160208401526040850135915061551d826152d5565b816040840152606085013560608401526080850135608084015260a085013591508082111561554b57600080fd5b50615558858286016153a3565b60a0830152505092915050565b600080600080600085870360e081121561557e57600080fd5b863567ffffffffffffffff8082111561559657600080fd5b6155a28a838b016154b6565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155db57600080fd5b60408901955060c08901359250808311156155f557600080fd5b828901925089601f84011261560957600080fd5b823591508082111561561a57600080fd5b508860208260051b840101111561563057600080fd5b959894975092955050506020019190565b60005b8381101561565c578181015183820152602001615644565b838111156120915750506000910152565b60008151808452615685816020860160208601615641565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a5f602083018461566d565b6000602082840312156156dc57600080fd5b5035919050565b60ff811681146152f757600080fd5b6000806000806080858703121561570857600080fd5b8435615713816152d5565b93506020850135615723816156e3565b93969395505050506040820135916060013590565b60006020828403121561574a57600080fd5b813567ffffffffffffffff81111561576157600080fd5b61576d848285016154b6565b949350505050565b60006020828403121561578757600080fd5b612a5f826152fa565b6000806000606084860312156157a557600080fd5b83356157b0816152d5565b925060208401356157c0816152d5565b915060408401356157d0816152d5565b809150509250925092565b600080600080600060a086880312156157f357600080fd5b85356157fe816152d5565b945060208601359350615813604087016152fa565b9250606086013561582381615317565b9150608086013567ffffffffffffffff81111561583f57600080fd5b61584b888289016153a3565b9150509295509295909350565b60006020828403121561586a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158b3576158b3615871565b500190565b600080604083850312156158cb57600080fd5b82516158d6816152d5565b60208401519092506158e7816156e3565b809150509250929050565b60006020828403121561590457600080fd5b8151612a5f816152d5565b80516fffffffffffffffffffffffffffffffff8116811461531257600080fd5b60006060828403121561594157600080fd5b6040516060810181811067ffffffffffffffff8211171561596457615964615325565b604052825181526159776020840161590f565b60208201526159886040840161590f565b60408201529392505050565b6000608082840312156159a657600080fd5b6040516080810181811067ffffffffffffffff821117156159c9576159c9615325565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1557615a15615325565b8360051b6020615a26818301615354565b868152918501918181019036841115615a3e57600080fd5b865b84811015615a7257803586811115615a585760008081fd5b615a6436828b016153a3565b845250918301918301615a40565b50979650505050505050565b600060208284031215615a9057600080fd5b8151612a5f81615317565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615aef816049850160208701615641565b919091016049019695505050505050565b600082821015615b1257615b12615871565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b3e57615b3e615871565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b6a57615b6a615871565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb157615bb1615b73565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0557615c05615871565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4457615c44615871565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c7857615c78615871565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cbf57615cbf615871565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615cfa57615cfa615871565b60008712925087820587128484161615615d1657615d16615871565b87850587128184161615615d2c57615d2c615871565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7457615d74615871565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615da857615da8615871565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615de657615de6615871565b500290565b600082615dfa57615dfa615b73565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e4a60c083018461566d565b98975050505050505050565b805163ffffffff8116811461531257600080fd5b600060c08284031215615e7c57600080fd5b60405160c0810181811067ffffffffffffffff82111715615e9f57615e9f615325565b604052615eab83615e56565b81526020830151615ebb816156e3565b60208201526040830151615ece816156e3565b6040820152615edf60608401615e56565b6060820152615ef060808401615e56565b6080820152615f0160a0840161590f565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f3e57615f3e615871565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8757615f87615b73565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb057615fb0615871565b90039392505050565b60008251615fcb818460208701615641565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200209f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616019806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615439565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b636600461556d565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156bf565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156d2565b611089565b34801561036257600080fd5b506101936103713660046156fa565b611144565b34801561038257600080fd5b50610193610391366004615740565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156d2565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b36600461577d565b611dde565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611df7565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615798565b611e51565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156d2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157e3565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120bb565b506106738282612267565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615860565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612534565b6107bd89826158a8565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615860565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a8565b909155506108a890508a8a8a8a8a8a6120bb565b50506108b48282612267565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158c0565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158fa565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190615937565b519050610ba4610b9f3686900386018661599c565b612610565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d8761266c565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190615937565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a615a02565b8a6040013561269c565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a86565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190615937565b602001516fffffffffffffffffffffffffffffffff166126c0565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a162013880612766565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615aa3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156bf565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f98261266c565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615860565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126c0565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190615937565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126c0565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127c2565b9150611d27565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cfe57856060015160386000828254611b5d9190615b08565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190615860565b9050611c28876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166128209092919063ffffffff16565b6060870151611c379082615b08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615860565b14611cfc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d2257611acd8660400151876080015160008960a001516127c2565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8990851515815260200190565b60405180910390a281158015611d9f5750326001145b15611dd6576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611deb826010615b1f565b61113e90615208615b4f565b600080611e026108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e49574791505090565b505060385490565b600054610100900460ff1615808015611e715750600054600160ff909116105b80611e8b5750303b158015611e8b575060005460ff166001145b611f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f7557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61203661287b565b801561209957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120dd575073ffffffffffffffffffffffffffffffffffffffff861615155b15612114576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211e8151611dde565b67ffffffffffffffff168367ffffffffffffffff16101561216b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121ca575033731111000000000000000000000000000000001111015b600086868686866040516020016121e5959493929190615aa3565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225591906156bf565b60405180910390a45050505050505050565b60015460009061229d907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b08565b905060006122a961298e565b90506000816020015160ff16826000015163ffffffff166122ca9190615baa565b9050821561240157600154600090612301908390700100000000000000000000000000000000900467ffffffffffffffff16615c12565b90506000836040015160ff16836123189190615c86565b6001546123389084906fffffffffffffffffffffffffffffffff16615c86565b6123429190615baa565b6001549091506000906123939061236c9084906fffffffffffffffffffffffffffffffff16615d42565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a4f565b905060018611156123c2576123bf61236c82876040015160ff1660018a6123ba9190615b08565b612a6e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612434908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124c1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124ed906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615db6565b905060006124ff48633b9aca00612ac3565b6125099083615df3565b905060005a6125189088615b08565b9050808211156108b4576108b461252f8284615b08565b612ada565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120999085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b03565b6000816000015182602001518360400151846060015160405160200161264f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a0880151935160009761264f979096959101615e07565b6000806126a886612c0f565b90506126b681868686612c41565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615860565b61275e90836158a8565b421192915050565b60018054829190601090612799908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127d2866000612c71565b905080612808576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526128769084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161258e565b505050565b600054610100900460ff16612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e72565b6000612a64612a5e8585612c8f565b83612c9f565b90505b9392505050565b6000670de0b6b3a7640000612aaf612a868583615baa565b612a9890670de0b6b3a7640000615c12565b612aaa85670de0b6b3a7640000615c86565b612cae565b612ab99086615c86565b612a649190615baa565b600081831015612ad35781612a67565b5090919050565b6000805a90505b825a612aed9083615b08565b101561287657612afc82615f15565b9150612ae1565b6000612b65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cdf9092919063ffffffff16565b8051909150156128765780806020019051810190612b839190615a86565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2b91815260200190565b6040516020818303038152906040529050919050565b6000612c6884612c52878686612cee565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ad35781612a67565b6000818312612ad35781612a67565b6000612a67670de0b6b3a764000083612cc68661376c565b612cd09190615c86565b612cda9190615baa565b6139b0565b6060612a648484600085613bef565b60606000845111612d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d6684613d85565b90506000612d7386613e71565b9050600084604051602001612d8a91815260200190565b60405160208183030381529060405290506000805b84518110156136e3576000858281518110612dbc57612dbc615f4d565b602002602001015190508451831115612e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f105780518051602091820120604051612ea592612e7f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b613067565b805151602011612fc65780518051602091820120604051612f3a92612e7f92910190815260200190565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b805184516020808701919091208251919092012014613067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b613073601060016158a8565b8160200151510361324f57845183036131e7576130ad81602001516010815181106130a0576130a0615f4d565b6020026020010151613ed4565b96506000875111613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b6001865161314e9190615b08565b82146131dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a67565b60008584815181106131fb576131fb615f4d565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061322657613226615f4d565b6020026020010151905061323981614034565b95506132466001866158a8565b945050506136d0565b60028160200151510361364857600061326782614059565b905060008160008151811061327e5761327e615f4d565b016020015160f81c90506000613295600283615f7c565b6132a0906002615f9e565b905060006132b1848360ff1661407d565b905060006132bf8a8961407d565b905060006132cd83836140b3565b90508083511461335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff851660021480613374575060ff85166003145b156135635780825114613409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61342387602001516001815181106130a0576130a0615f4d565b9c5060008d51116134b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134c49190615b08565b8814613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a67565b60ff85161580613576575060ff85166001145b156135b5576135a2876020015160018151811061359557613595615f4d565b6020026020010151614034565b99506135ae818a6158a8565b985061363d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136d0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136db81615f15565b915050612d9f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137e484614167565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139e157506000919050565b680755bf798b4a1bf1e58212613a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d289190615fc1565b60006040518083038185875af1925050503d8060008114613d65576040519150601f19603f3d011682016040523d82523d6000602084013e613d6a565b606091505b5091509150613d7a82828661423d565b979650505050505050565b80516060908067ffffffffffffffff811115613da357613da361532d565b604051908082528060200260200182016040528015613de857816020015b6040805180820190915260608082526020820152815260200190600190039081613dc15790505b50915060005b81811015613e6a576040518060400160405280858381518110613e1357613e13615f4d565b60200260200101518152602001613e42868481518110613e3557613e35615f4d565b6020026020010151614290565b815250838281518110613e5757613e57615f4d565b6020908102919091010152600101613dee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec9578060011b82018184015160001a8060041c8253600f811660018301535050600101613e9b565b509295945050505050565b60606000806000613ee4856142a3565b919450925090506000816001811115613eff57613eff615fdd565b14613f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f9682846158a8565b855114614025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6885602001518484614d10565b606060208260000151106140505761404b82613ed4565b61113e565b61113e82614da4565b606061113e61407883602001516000815181106130a0576130a0615f4d565b613e71565b60608251821061409c575060408051602081019091526000815261113e565b612a6783838486516140ae9190615b08565b614dba565b60008082518451106140c65782516140c9565b83515b90505b808210801561415057508282815181106140e8576140e8615f4d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061412757614127615f4d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614160578160010191506140cc565b5092915050565b60008082116141d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561424c575081612a67565b82511561425c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156bf565b606061113e61429e83614f92565b61507b565b600080600080846000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f8111614386576000600160009450945094505050614d09565b60b7811161459457600061439b608083615b08565b905080876000015111614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144cf57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d09915050565b60bf81116148e25760006145a960b783615b08565b905080876000015111614664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61481081846158a8565b8951116148c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148d08360016158a8565b9750955060009450614d099350505050565b60f781116149c35760006148f760c083615b08565b9050808760000151116149b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d09915050565b60006149d060f783615b08565b905080876000015111614a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c3781846158a8565b895111614cec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cf78360016158a8565b9750955060019450614d099350505050565b9193909250565b60608167ffffffffffffffff811115614d2b57614d2b61532d565b6040519080825280601f01601f191660200182016040528015614d55576020820181803683370190505b5090508115612a67576000614d6a84866158a8565b90506020820160005b84811015614d8b578281015182820152602001614d73565b84811115614d9a576000858301525b5050509392505050565b606061113e826020015160008460000151614d10565b60608182601f011015614e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f215760405191506000825260208201604052614f89565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f5a578051835260209283019201614f42565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161505d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b6060600080600061508b856142a3565b9194509250905060018160018111156150a6576150a6615fdd565b14615133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513f83856158a8565b146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151e35790505093506000835b86518110156152d1576000806152566040518060400160405280858c6000015161523a9190615b08565b8152602001858c6020015161524f91906158a8565b90526142a3565b50915091506040518060400160405280838361527291906158a8565b8152602001848b6020015161528791906158a8565b81525088858151811061529c5761529c615f4d565b60209081029190910101526152b26001856158a8565b93506152be81836158a8565b6152c890846158a8565b92505050615210565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152ff57600080fd5b50565b803567ffffffffffffffff8116811461531a57600080fd5b919050565b80151581146152ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153a3576153a361532d565b604052919050565b600082601f8301126153bc57600080fd5b813567ffffffffffffffff8111156153d6576153d661532d565b61540760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161535c565b81815284602083860101111561541c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561545257600080fd5b863561545d816152dd565b9550602087013594506040870135935061547960608801615302565b925060808701356154898161531f565b915060a087013567ffffffffffffffff8111156154a557600080fd5b6154b189828a016153ab565b9150509295509295509295565b600060c082840312156154d057600080fd5b60405160c0810167ffffffffffffffff82821081831117156154f4576154f461532d565b81604052829350843583526020850135915061550f826152dd565b81602084015260408501359150615525826152dd565b816040840152606085013560608401526080850135608084015260a085013591508082111561555357600080fd5b50615560858286016153ab565b60a0830152505092915050565b600080600080600085870360e081121561558657600080fd5b863567ffffffffffffffff8082111561559e57600080fd5b6155aa8a838b016154be565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155e357600080fd5b60408901955060c08901359250808311156155fd57600080fd5b828901925089601f84011261561157600080fd5b823591508082111561562257600080fd5b508860208260051b840101111561563857600080fd5b959894975092955050506020019190565b60005b8381101561566457818101518382015260200161564c565b838111156120995750506000910152565b6000815180845261568d816020860160208601615649565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a676020830184615675565b6000602082840312156156e457600080fd5b5035919050565b60ff811681146152ff57600080fd5b6000806000806080858703121561571057600080fd5b843561571b816152dd565b9350602085013561572b816156eb565b93969395505050506040820135916060013590565b60006020828403121561575257600080fd5b813567ffffffffffffffff81111561576957600080fd5b615775848285016154be565b949350505050565b60006020828403121561578f57600080fd5b612a6782615302565b6000806000606084860312156157ad57600080fd5b83356157b8816152dd565b925060208401356157c8816152dd565b915060408401356157d8816152dd565b809150509250925092565b600080600080600060a086880312156157fb57600080fd5b8535615806816152dd565b94506020860135935061581b60408701615302565b9250606086013561582b8161531f565b9150608086013567ffffffffffffffff81111561584757600080fd5b615853888289016153ab565b9150509295509295909350565b60006020828403121561587257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158bb576158bb615879565b500190565b600080604083850312156158d357600080fd5b82516158de816152dd565b60208401519092506158ef816156eb565b809150509250929050565b60006020828403121561590c57600080fd5b8151612a67816152dd565b80516fffffffffffffffffffffffffffffffff8116811461531a57600080fd5b60006060828403121561594957600080fd5b6040516060810181811067ffffffffffffffff8211171561596c5761596c61532d565b6040528251815261597f60208401615917565b602082015261599060408401615917565b60408201529392505050565b6000608082840312156159ae57600080fd5b6040516080810181811067ffffffffffffffff821117156159d1576159d161532d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1d57615a1d61532d565b8360051b6020615a2e81830161535c565b868152918501918181019036841115615a4657600080fd5b865b84811015615a7a57803586811115615a605760008081fd5b615a6c36828b016153ab565b845250918301918301615a48565b50979650505050505050565b600060208284031215615a9857600080fd5b8151612a678161531f565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615af7816049850160208701615649565b919091016049019695505050505050565b600082821015615b1a57615b1a615879565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b4657615b46615879565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b7257615b72615879565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb957615bb9615b7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0d57615c0d615879565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4c57615c4c615879565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c8057615c80615879565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cc757615cc7615879565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615d0257615d02615879565b60008712925087820587128484161615615d1e57615d1e615879565b87850587128184161615615d3457615d34615879565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7c57615d7c615879565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615db057615db0615879565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615dee57615dee615879565b500290565b600082615e0257615e02615b7b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e5260c0830184615675565b98975050505050505050565b805163ffffffff8116811461531a57600080fd5b600060c08284031215615e8457600080fd5b60405160c0810181811067ffffffffffffffff82111715615ea757615ea761532d565b604052615eb383615e5e565b81526020830151615ec3816156eb565b60208201526040830151615ed6816156eb565b6040820152615ee760608401615e5e565b6060820152615ef860808401615e5e565b6080820152615f0960a08401615917565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f4657615f46615879565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8f57615f8f615b7b565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb857615fb8615879565b90039392505050565b60008251615fd3818460208701615649565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", } // OptimismPortalABI is the input ABI used to generate the binding from. From 1e85157895ff011479fd1b7bf953ea389888e532 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 18 Apr 2024 18:57:43 -0600 Subject: [PATCH 13/45] codesize: fix --- packages/contracts-bedrock/src/L1/OptimismPortal.sol | 10 ++++------ .../contracts-bedrock/src/libraries/PortalErrors.sol | 2 ++ .../contracts-bedrock/test/L1/OptimismPortal.t.sol | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/contracts-bedrock/src/L1/OptimismPortal.sol b/packages/contracts-bedrock/src/L1/OptimismPortal.sol index 99e81d4cc9d..a13784e45bd 100644 --- a/packages/contracts-bedrock/src/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/src/L1/OptimismPortal.sol @@ -103,8 +103,8 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { } /// @notice Semantic version. - /// @custom:semver 2.6.0 - string public constant version = "2.6.0"; + /// @custom:semver 2.6.0-beta+custom-gas-token + string public constant version = "2.6.0-beta+custom-gas-token"; /// @notice Constructs the OptimismPortal contract. constructor() { @@ -216,7 +216,7 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { // Prevent users from creating a deposit transaction where this address is the message // sender on L2. Because this is checked here, we do not need to check again in // `finalizeWithdrawalTransaction`. - require(_tx.target != address(this), "OptimismPortal: you cannot send messages to the portal contract"); + if (_tx.target == address(this)) revert BadTarget(); // Get the output root and load onto the stack to prevent multiple mloads. This will // revert if there is no output root for the given block number. @@ -286,9 +286,7 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { // Make sure that the l2Sender has not yet been set. The l2Sender is set to a value other // than the default value when a withdrawal transaction is being finalized. This check is // a defacto reentrancy guard. - require( - l2Sender == Constants.DEFAULT_L2_SENDER, "OptimismPortal: can only trigger one withdrawal per transaction" - ); + if (l2Sender != Constants.DEFAULT_L2_SENDER) revert NonReentrant(); // Grab the proven withdrawal from the `provenWithdrawals` map. bytes32 withdrawalHash = Hashing.hashWithdrawal(_tx); diff --git a/packages/contracts-bedrock/src/libraries/PortalErrors.sol b/packages/contracts-bedrock/src/libraries/PortalErrors.sol index dba16b80c12..0ec300370f2 100644 --- a/packages/contracts-bedrock/src/libraries/PortalErrors.sol +++ b/packages/contracts-bedrock/src/libraries/PortalErrors.sol @@ -20,3 +20,5 @@ error Unauthorized(); error CallPaused(); /// @notice Error for special gas estimation. error GasEstimation(); +/// @notice Error for when a method is being reentered. +error NonReentrant(); diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index 7aa8fc4178c..53df77b3dbf 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -579,7 +579,7 @@ contract OptimismPortal_FinalizeWithdrawal_Test is CommonTest { /// @dev Asserts that the reentrant call will revert. function callPortalAndExpectRevert() external payable { - vm.expectRevert("OptimismPortal: can only trigger one withdrawal per transaction"); + vm.expectRevert(NonReentrant.selector); // Arguments here don't matter, as the require check is the first thing that happens. // We assume that this has already been proven. optimismPortal.finalizeWithdrawalTransaction(_defaultTx); @@ -604,7 +604,7 @@ contract OptimismPortal_FinalizeWithdrawal_Test is CommonTest { /// @dev Tests that `proveWithdrawalTransaction` reverts when the target is the portal contract. function test_proveWithdrawalTransaction_onSelfCall_reverts() external { _defaultTx.target = address(optimismPortal); - vm.expectRevert("OptimismPortal: you cannot send messages to the portal contract"); + vm.expectRevert(BadTarget.selector); optimismPortal.proveWithdrawalTransaction(_defaultTx, _proposedOutputIndex, _outputRootProof, _withdrawalProof); } From 052f17e51bd312e1351c4f7ca588b9f61e0d23d8 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 18 Apr 2024 21:01:30 -0600 Subject: [PATCH 14/45] contracts-bedrock: custom gas token cleanup Co-authored-by: Diego <105765223+0xfuturistic@users.noreply.github.com> --- op-bindings/bindings/l1block.go | 2 +- .../bindings/l1crossdomainmessenger.go | 2 +- op-bindings/bindings/l1standardbridge.go | 2 +- .../bindings/l2crossdomainmessenger.go | 2 +- op-bindings/bindings/l2standardbridge.go | 2 +- op-bindings/bindings/optimismportal.go | 4 +- op-bindings/bindings/systemconfig.go | 35 +- packages/contracts-bedrock/semver-lock.json | 24 +- .../snapshots/abi/OptimismPortal.json | 5 + .../snapshots/abi/SystemConfig.json | 13 + .../snapshots/state-diff/Kontrol-Deploy.json | 604 +++++++++--------- .../src/L1/L1CrossDomainMessenger.sol | 4 +- .../src/L1/L1StandardBridge.sol | 4 +- .../contracts-bedrock/src/L1/SystemConfig.sol | 18 +- .../src/L2/L2CrossDomainMessenger.sol | 4 +- .../src/L2/L2StandardBridge.sol | 4 +- .../test/L1/L1CrossDomainMessenger.t.sol | 2 +- .../test/L1/L1StandardBridge.t.sol | 2 +- .../test/L1/OptimismPortal.t.sol | 2 +- .../test/L1/SystemConfig.t.sol | 4 +- .../test/L2/L2CrossDomainMessenger.t.sol | 2 +- .../test/L2/L2StandardBridge.t.sol | 2 +- packages/contracts-bedrock/test/L2/WETH.t.sol | 4 +- .../proofs/utils/DeploymentSummary.sol | 16 +- .../proofs/utils/DeploymentSummaryCode.sol | 8 +- .../test/libraries/GasPayingToken.t.sol | 6 +- 26 files changed, 418 insertions(+), 359 deletions(-) diff --git a/op-bindings/bindings/l1block.go b/op-bindings/bindings/l1block.go index 10cf2ef4293..e44c262c7da 100644 --- a/op-bindings/bindings/l1block.go +++ b/op-bindings/bindings/l1block.go @@ -31,7 +31,7 @@ var ( // L1BlockMetaData contains all meta data concerning the L1Block contract. var L1BlockMetaData = &bind.MetaData{ ABI: "[{\"type\":\"function\",\"name\":\"DEPOSITOR_ACCOUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1FeeOverhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1FeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"number\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGasPayingToken\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_symbol\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValues\",\"inputs\":[{\"name\":\"_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_basefee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_l1FeeScalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesEcotone\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"timestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"GasPayingTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"uint8\"},{\"name\":\"name\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"symbol\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"NotDepositor\",\"inputs\":[]}]", - Bin: "0x608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806371cfaa3f116100cd578063c598591811610081578063e591b28211610066578063e591b28214610331578063e81b2c6d14610371578063f82061401461037a57600080fd5b8063c598591814610309578063d84447151461032957600080fd5b80638b239f73116100b25780638b239f73146102d75780639e8c4966146102e0578063b80777ea146102e957600080fd5b806371cfaa3f146102b05780638381f58a146102c357600080fd5b806354fd4d50116101245780635cf24969116101095780635cf249691461024957806364ca23ef1461025257806368d5dca61461027f57600080fd5b806354fd4d50146101f8578063550fcdc91461024157600080fd5b8063213268491161015557806321326849146101a25780634397dfef146101ba578063440a5e20146101f057600080fd5b8063015d8eb91461017157806309bd5a6014610186575b600080fd5b61018461017f366004610953565b610383565b005b61018f60025481565b6040519081526020015b60405180910390f35b6101aa6104c2565b6040519015158152602001610199565b6101c2610501565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610199565b610184610515565b6102346040518060400160405280600581526020017f312e332e3000000000000000000000000000000000000000000000000000000081525081565b60405161019991906109c5565b61023461056a565b61018f60015481565b6003546102669067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610199565b60035461029b9068010000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610199565b6101846102be366004610a38565b610579565b6000546102669067ffffffffffffffff1681565b61018f60055481565b61018f60065481565b6000546102669068010000000000000000900467ffffffffffffffff1681565b60035461029b906c01000000000000000000000000900463ffffffff1681565b61023461062e565b61034c73deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610199565b61018f60045481565b61018f60075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead00011461042a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b6000806104cd610501565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60008061050c610638565b90939092509050565b3373deaddeaddeaddeaddeaddeaddeaddeaddead00011461053e57633cc50b456000526004601cfd5b60043560801c60035560143560801c600055602435600155604435600755606435600255608435600455565b60606105746106b9565b905090565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146105c6576040517f3cc50b4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105d28484848461077a565b604080518381526020810183905260ff85169173ffffffffffffffffffffffffffffffffffffffff8716917f10e43c4d58f3ef4edae7c1ca2e7f02d46b2cadbcc046737038527ed8486ffeb0910160405180910390a350505050565b606061057461084c565b6000808061066e61066a60017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec610a9d565b5490565b73ffffffffffffffffffffffffffffffffffffffff811693509050826106ad575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b606060006106c5610638565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161073e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b61077461076f61066a60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd05764610a9d565b610902565b91505090565b6107e06107a860017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec610a9d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61081361080e60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d610a9d565b839055565b61084661084160017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd05764610a9d565b829055565b50505050565b60606000610858610638565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016108d157505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b61077461076f61066a60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d610a9d565b60405160005b82811a1561091857600101610908565b80825260208201838152600082820152505060408101604052919050565b803567ffffffffffffffff8116811461094e57600080fd5b919050565b600080600080600080600080610100898b03121561097057600080fd5b61097989610936565b975061098760208a01610936565b965060408901359550606089013594506109a360808a01610936565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156109f2578581018301518582016040015282016109d6565b81811115610a04576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008060008060808587031215610a4e57600080fd5b843573ffffffffffffffffffffffffffffffffffffffff81168114610a7257600080fd5b9350602085013560ff81168114610a8857600080fd5b93969395505050506040820135916060013590565b600082821015610ad6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea164736f6c634300080f000a", + Bin: "0x608060405234801561001057600080fd5b50610ae8806100206000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806371cfaa3f116100cd578063c598591811610081578063e591b28211610066578063e591b28214610331578063e81b2c6d14610371578063f82061401461037a57600080fd5b8063c598591814610309578063d84447151461032957600080fd5b80638b239f73116100b25780638b239f73146102d75780639e8c4966146102e0578063b80777ea146102e957600080fd5b806371cfaa3f146102b05780638381f58a146102c357600080fd5b806354fd4d50116101245780635cf24969116101095780635cf249691461024957806364ca23ef1461025257806368d5dca61461027f57600080fd5b806354fd4d50146101f8578063550fcdc91461024157600080fd5b8063213268491161015557806321326849146101a25780634397dfef146101ba578063440a5e20146101f057600080fd5b8063015d8eb91461017157806309bd5a6014610186575b600080fd5b61018461017f366004610953565b610383565b005b61018f60025481565b6040519081526020015b60405180910390f35b6101aa6104c2565b6040519015158152602001610199565b6101c2610501565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610199565b610184610515565b6102346040518060400160405280601b81526020017f312e332e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b60405161019991906109c5565b61023461056a565b61018f60015481565b6003546102669067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610199565b60035461029b9068010000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610199565b6101846102be366004610a38565b610579565b6000546102669067ffffffffffffffff1681565b61018f60055481565b61018f60065481565b6000546102669068010000000000000000900467ffffffffffffffff1681565b60035461029b906c01000000000000000000000000900463ffffffff1681565b61023461062e565b61034c73deaddeaddeaddeaddeaddeaddeaddeaddead000181565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610199565b61018f60045481565b61018f60075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead00011461042a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b6000806104cd610501565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60008061050c610638565b90939092509050565b3373deaddeaddeaddeaddeaddeaddeaddeaddead00011461053e57633cc50b456000526004601cfd5b60043560801c60035560143560801c600055602435600155604435600755606435600255608435600455565b60606105746106b9565b905090565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146105c6576040517f3cc50b4500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105d28484848461077a565b604080518381526020810183905260ff85169173ffffffffffffffffffffffffffffffffffffffff8716917f10e43c4d58f3ef4edae7c1ca2e7f02d46b2cadbcc046737038527ed8486ffeb0910160405180910390a350505050565b606061057461084c565b6000808061066e61066a60017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec610a9d565b5490565b73ffffffffffffffffffffffffffffffffffffffff811693509050826106ad575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b606060006106c5610638565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161073e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b61077461076f61066a60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd05764610a9d565b610902565b91505090565b6107e06107a860017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec610a9d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61081361080e60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d610a9d565b839055565b61084661084160017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd05764610a9d565b829055565b50505050565b60606000610858610638565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016108d157505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b61077461076f61066a60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d610a9d565b60405160005b82811a1561091857600101610908565b80825260208201838152600082820152505060408101604052919050565b803567ffffffffffffffff8116811461094e57600080fd5b919050565b600080600080600080600080610100898b03121561097057600080fd5b61097989610936565b975061098760208a01610936565b965060408901359550606089013594506109a360808a01610936565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156109f2578581018301518582016040015282016109d6565b81811115610a04576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008060008060808587031215610a4e57600080fd5b843573ffffffffffffffffffffffffffffffffffffffff81168114610a7257600080fd5b9350602085013560ff81168114610a8857600080fd5b93969395505050506040820135916060013590565b600082821015610ad6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b50039056fea164736f6c634300080f000a", } // L1BlockABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/l1crossdomainmessenger.go b/op-bindings/bindings/l1crossdomainmessenger.go index e4cd10aff32..15a540c08f9 100644 --- a/op-bindings/bindings/l1crossdomainmessenger.go +++ b/op-bindings/bindings/l1crossdomainmessenger.go @@ -31,7 +31,7 @@ var ( // L1CrossDomainMessengerMetaData contains all meta data concerning the L1CrossDomainMessenger contract. var L1CrossDomainMessengerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PORTAL\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"_addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_portal\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", } // L1CrossDomainMessengerABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/l1standardbridge.go b/op-bindings/bindings/l1standardbridge.go index cdf80143e12..19d4f3365a7 100644 --- a/op-bindings/bindings/l1standardbridge.go +++ b/op-bindings/bindings/l1standardbridge.go @@ -31,7 +31,7 @@ var ( // L1StandardBridgeMetaData contains all meta data concerning the L1StandardBridge contract. var L1StandardBridgeMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositERC20\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositERC20To\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeERC20Withdrawal\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeETHWithdrawal\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_messenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l2TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20DepositInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20WithdrawalFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHDepositInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHWithdrawalFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", } // L1StandardBridgeABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/l2crossdomainmessenger.go b/op-bindings/bindings/l2crossdomainmessenger.go index 16ea4e6bc6e..dbf5ee6c704 100644 --- a/op-bindings/bindings/l2crossdomainmessenger.go +++ b/op-bindings/bindings/l2crossdomainmessenger.go @@ -31,7 +31,7 @@ var ( // L2CrossDomainMessengerMetaData contains all meta data concerning the L2CrossDomainMessenger contract. var L2CrossDomainMessengerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000239565b600054600160a81b900460ff16158080156200004d57506000546001600160a01b90910460ff16105b806200008457506200006a306200017360201b620014e11760201c565b158015620000845750600054600160a01b900460ff166001145b620000ed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011b576000805460ff60a81b1916600160a81b1790555b620001268262000182565b80156200016f576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e4565b60cc546001600160a01b0316620002175760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611e9c80620002496000396000f3fe6080604052600436106101805760003560e01c80636e296e45116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b14610439578063db505d801461044c578063ecc704281461047957600080fd5b8063b1b1b209146103c9578063b28ade25146103f9578063c4d66de81461041957600080fd5b80639fce812c116100b05780639fce812c1461036e578063a4e7f8bd14610399578063a71198691461036e57600080fd5b80636e296e451461031d57806383a74074146103575780638cbeeef21461028757600080fd5b80633f827a5a1161013857806354fd4d501161011257806354fd4d501461029d5780635644cfdf146102f35780635c975abb1461030957600080fd5b80633f827a5a1461021c5780634397dfef146102445780634c1d6a691461028757600080fd5b8063213268491161016957806321326849146101cd5780632828d7e8146101f25780633dbb202b1461020757600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b506101e26104de565b60405190151581526020016101af565b3480156101fe57600080fd5b5061019a604081565b61021a610215366004611955565b61051d565b005b34801561022857600080fd5b50610231600181565b60405161ffff90911681526020016101af565b34801561025057600080fd5b5061025961081a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101af565b34801561029357600080fd5b5061019a619c4081565b3480156102a957600080fd5b506102e66040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516101af9190611a27565b3480156102ff57600080fd5b5061019a61138881565b34801561031557600080fd5b5060006101e2565b34801561032957600080fd5b506103326108a8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561036357600080fd5b5061019a62030d4081565b34801561037a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610332565b3480156103a557600080fd5b506101e26103b4366004611a41565b60ce6020526000908152604090205460ff1681565b3480156103d557600080fd5b506101e26103e4366004611a41565b60cb6020526000908152604090205460ff1681565b34801561040557600080fd5b5061019a610414366004611a5a565b61098f565b34801561042557600080fd5b5061021a610434366004611aae565b6109fd565b61021a610447366004611acb565b610bfc565b34801561045857600080fd5b5060cf546103329073ffffffffffffffffffffffffffffffffffffffff1681565b34801561048557600080fd5b506104d060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b6000806104e961081a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105256104de565b156105bd5734156105bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546106ef9073ffffffffffffffffffffffffffffffffffffffff166105e585858561098f565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061065160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161066d9796959493929190611b9a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114fd565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561077460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610786959493929190611bf9565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa15801561087b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089f9190611c47565b90939092509050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105b4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109ab604063ffffffff8816611cb6565b6109b59190611ce6565b6109c0601088611cb6565b6109cd9062030d40611d34565b6109d79190611d34565b6109e19190611d34565b6109eb9190611d34565b6109f59190611d34565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a48575060005460017401000000000000000000000000000000000000000090910460ff16105b80610a7a5750303b158015610a7a575060005474010000000000000000000000000000000000000000900460ff166001145b610b06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105b4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610b8c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610b958261158b565b8015610bf857600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610cb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105b4565b8061ffff16600003610dac576000610d08878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610daa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105b4565b505b6000610df2898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e3b60cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610e7357853414610e4f57610e4f611d60565b600081815260ce602052604090205460ff1615610e6e57610e6e611d60565b610fc5565b3415610f27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105b4565b600081815260ce602052604090205460ff16610fc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105b4565b610fce87611709565b15611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105b4565b600081815260cb602052604090205460ff1615611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105b4565b61114185611132611388619c40611d34565b67ffffffffffffffff1661175e565b1580611167575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561128057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105b4565b50506114d8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061131188619c405a6112d49190611d8f565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061177c92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113c757600082815260cb602052604090205460ff161561136457611364611d60565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114d4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105b4565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac90849061155390889088908790600401611da6565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105b4565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611796565b805190602001209050949350505050565b60006116f687878787878761182f565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611758575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016117af9493929190611dee565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161184c96959493929190611e38565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f057600080fd5b50565b60008083601f84011261190557600080fd5b50813567ffffffffffffffff81111561191d57600080fd5b60208301915083602082850101111561193557600080fd5b9250929050565b803563ffffffff8116811461195057600080fd5b919050565b6000806000806060858703121561196b57600080fd5b8435611976816118ce565b9350602085013567ffffffffffffffff81111561199257600080fd5b61199e878288016118f3565b90945092506119b190506040860161193c565b905092959194509250565b6000815180845260005b818110156119e2576020818501810151868301820152016119c6565b818111156119f4576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a3a60208301846119bc565b9392505050565b600060208284031215611a5357600080fd5b5035919050565b600080600060408486031215611a6f57600080fd5b833567ffffffffffffffff811115611a8657600080fd5b611a92868287016118f3565b9094509250611aa590506020850161193c565b90509250925092565b600060208284031215611ac057600080fd5b8135611a3a816118ce565b600080600080600080600060c0888a031215611ae657600080fd5b873596506020880135611af8816118ce565b95506040880135611b08816118ce565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611b3257600080fd5b611b3e8a828b016118f3565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611bec60c083018486611b51565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611c29608083018688611b51565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611c5a57600080fd5b8251611c65816118ce565b602084015190925060ff81168114611c7c57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611cdd57611cdd611c87565b02949350505050565b600067ffffffffffffffff80841680611d28577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611d5757611d57611c87565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611da157611da1611c87565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611de560608301846119bc565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611e2760808301856119bc565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611e8360c08301846119bc565b9897505050505050505056fea164736f6c634300080f000a", + Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000239565b600054600160a81b900460ff16158080156200004d57506000546001600160a01b90910460ff16105b806200008457506200006a306200017360201b620014e11760201c565b158015620000845750600054600160a01b900460ff166001145b620000ed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011b576000805460ff60a81b1916600160a81b1790555b620001268262000182565b80156200016f576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e4565b60cc546001600160a01b0316620002175760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611e9c80620002496000396000f3fe6080604052600436106101805760003560e01c80636e296e45116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b14610439578063db505d801461044c578063ecc704281461047957600080fd5b8063b1b1b209146103c9578063b28ade25146103f9578063c4d66de81461041957600080fd5b80639fce812c116100b05780639fce812c1461036e578063a4e7f8bd14610399578063a71198691461036e57600080fd5b80636e296e451461031d57806383a74074146103575780638cbeeef21461028757600080fd5b80633f827a5a1161013857806354fd4d501161011257806354fd4d501461029d5780635644cfdf146102f35780635c975abb1461030957600080fd5b80633f827a5a1461021c5780634397dfef146102445780634c1d6a691461028757600080fd5b8063213268491161016957806321326849146101cd5780632828d7e8146101f25780633dbb202b1461020757600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b506101e26104de565b60405190151581526020016101af565b3480156101fe57600080fd5b5061019a604081565b61021a610215366004611955565b61051d565b005b34801561022857600080fd5b50610231600181565b60405161ffff90911681526020016101af565b34801561025057600080fd5b5061025961081a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101af565b34801561029357600080fd5b5061019a619c4081565b3480156102a957600080fd5b506102e66040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101af9190611a27565b3480156102ff57600080fd5b5061019a61138881565b34801561031557600080fd5b5060006101e2565b34801561032957600080fd5b506103326108a8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561036357600080fd5b5061019a62030d4081565b34801561037a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610332565b3480156103a557600080fd5b506101e26103b4366004611a41565b60ce6020526000908152604090205460ff1681565b3480156103d557600080fd5b506101e26103e4366004611a41565b60cb6020526000908152604090205460ff1681565b34801561040557600080fd5b5061019a610414366004611a5a565b61098f565b34801561042557600080fd5b5061021a610434366004611aae565b6109fd565b61021a610447366004611acb565b610bfc565b34801561045857600080fd5b5060cf546103329073ffffffffffffffffffffffffffffffffffffffff1681565b34801561048557600080fd5b506104d060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b6000806104e961081a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105256104de565b156105bd5734156105bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546106ef9073ffffffffffffffffffffffffffffffffffffffff166105e585858561098f565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061065160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161066d9796959493929190611b9a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114fd565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561077460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610786959493929190611bf9565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa15801561087b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089f9190611c47565b90939092509050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105b4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109ab604063ffffffff8816611cb6565b6109b59190611ce6565b6109c0601088611cb6565b6109cd9062030d40611d34565b6109d79190611d34565b6109e19190611d34565b6109eb9190611d34565b6109f59190611d34565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a48575060005460017401000000000000000000000000000000000000000090910460ff16105b80610a7a5750303b158015610a7a575060005474010000000000000000000000000000000000000000900460ff166001145b610b06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105b4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610b8c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610b958261158b565b8015610bf857600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610cb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105b4565b8061ffff16600003610dac576000610d08878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610daa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105b4565b505b6000610df2898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e3b60cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610e7357853414610e4f57610e4f611d60565b600081815260ce602052604090205460ff1615610e6e57610e6e611d60565b610fc5565b3415610f27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105b4565b600081815260ce602052604090205460ff16610fc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105b4565b610fce87611709565b15611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105b4565b600081815260cb602052604090205460ff1615611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105b4565b61114185611132611388619c40611d34565b67ffffffffffffffff1661175e565b1580611167575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561128057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105b4565b50506114d8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061131188619c405a6112d49190611d8f565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061177c92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113c757600082815260cb602052604090205460ff161561136457611364611d60565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114d4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105b4565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac90849061155390889088908790600401611da6565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105b4565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611796565b805190602001209050949350505050565b60006116f687878787878761182f565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611758575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016117af9493929190611dee565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161184c96959493929190611e38565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f057600080fd5b50565b60008083601f84011261190557600080fd5b50813567ffffffffffffffff81111561191d57600080fd5b60208301915083602082850101111561193557600080fd5b9250929050565b803563ffffffff8116811461195057600080fd5b919050565b6000806000806060858703121561196b57600080fd5b8435611976816118ce565b9350602085013567ffffffffffffffff81111561199257600080fd5b61199e878288016118f3565b90945092506119b190506040860161193c565b905092959194509250565b6000815180845260005b818110156119e2576020818501810151868301820152016119c6565b818111156119f4576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a3a60208301846119bc565b9392505050565b600060208284031215611a5357600080fd5b5035919050565b600080600060408486031215611a6f57600080fd5b833567ffffffffffffffff811115611a8657600080fd5b611a92868287016118f3565b9094509250611aa590506020850161193c565b90509250925092565b600060208284031215611ac057600080fd5b8135611a3a816118ce565b600080600080600080600060c0888a031215611ae657600080fd5b873596506020880135611af8816118ce565b95506040880135611b08816118ce565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611b3257600080fd5b611b3e8a828b016118f3565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611bec60c083018486611b51565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611c29608083018688611b51565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611c5a57600080fd5b8251611c65816118ce565b602084015190925060ff81168114611c7c57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611cdd57611cdd611c87565b02949350505050565b600067ffffffffffffffff80841680611d28577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611d5757611d57611c87565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611da157611da1611c87565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611de560608301846119bc565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611e2760808301856119bc565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611e8360c08301846119bc565b9897505050505050505056fea164736f6c634300080f000a", } // L2CrossDomainMessengerABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/l2standardbridge.go b/op-bindings/bindings/l2standardbridge.go index ad1c0618c32..aa722d80db0 100644 --- a/op-bindings/bindings/l2standardbridge.go +++ b/op-bindings/bindings/l2standardbridge.go @@ -31,7 +31,7 @@ var ( // L2StandardBridgeMetaData contains all meta data concerning the L2StandardBridge contract. var L2StandardBridgeMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeDeposit\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_otherBridge\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdrawTo\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"DepositFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b620005171760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612d4580620002276000396000f3fe6080604052600436106101635760003560e01c80635c975abb116100c0578063927ede2d11610074578063c4d66de811610059578063c4d66de8146104b7578063c89701a2146104d7578063e11013dd1461050457600080fd5b8063927ede2d14610479578063a3a79548146104a457600080fd5b80637f46ddb2116100a55780637f46ddb2146102ba57806387087623146104135780638f601f661461043357600080fd5b80635c975abb146103ec578063662a633a1461040057600080fd5b806336c717c1116101175780634397dfef116100fc5780634397dfef14610333578063540abf731461037657806354fd4d501461039657600080fd5b806336c717c1146102ba5780633cb747bf1461030657600080fd5b80631635f5fd116101485780631635f5fd1461026a578063213268491461027d57806332b7006d146102a757600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b156101fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023073deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d4060405180602001604052806000815250610533565b005b600080fd5b34801561024357600080fd5b50610230610252366004612703565b61060e565b6102306102653660046127b4565b6109b0565b610230610278366004612807565b610a87565b34801561028957600080fd5b50610292610f6e565b60405190151581526020015b60405180910390f35b6102306102b536600461287a565b610fad565b3480156102c657600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029e565b34801561031257600080fd5b506003546102e19073ffffffffffffffffffffffffffffffffffffffff1681565b34801561033f57600080fd5b50610348611087565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff90911660208301520161029e565b34801561038257600080fd5b506102306103913660046128ce565b611115565b3480156103a257600080fd5b506103df6040518060400160405280600581526020017f312e392e3000000000000000000000000000000000000000000000000000000081525081565b60405161029e91906129bb565b3480156103f857600080fd5b506000610292565b61023061040e366004612703565b61115a565b34801561041f57600080fd5b5061023061042e3660046129ce565b6111cd565b34801561043f57600080fd5b5061046b61044e366004612a51565b600260209081526000928352604080842090915290825290205481565b60405190815260200161029e565b34801561048557600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102e1565b6102306104b23660046129ce565b6112a1565b3480156104c357600080fd5b506102306104d2366004612a8a565b6112e5565b3480156104e357600080fd5b506004546102e19073ffffffffffffffffffffffffffffffffffffffff1681565b610230610512366004612aa7565b61148e565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016105825761057d85858585856114d7565b610606565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f39190612b0a565b905061060487828888888888611736565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106e1575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c99190612b0a565b73ffffffffffffffffffffffffffffffffffffffff16145b610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101f3565b61079c87611a61565b156108ea576107ab8787611ac3565b61085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101f3565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108cd57600080fd5b505af11580156108e1573d6000803e3d6000fd5b5050505061096c565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610928908490612b56565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561096c908585611be3565b610604878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cb792505050565b333b15610a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b610a823333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114d792505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b5a575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b429190612b0a565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101f3565b610c14610f6e565b15610ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e00000000000000000060648201526084016101f3565b823414610d30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101f3565b3073ffffffffffffffffffffffffffffffffffffffff851603610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101f3565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101f3565b610ec285858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d4592505050565b6000610edf855a8660405180602001604052806000815250611de6565b905080610606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101f3565b600080610f79611087565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b333b1561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b611080853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061053392505050565b5050505050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa1580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612b6d565b90939092509050565b61060487873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061173692505050565b73ffffffffffffffffffffffffffffffffffffffff87161580156111a7575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b156111be576111b98585858585610a87565b610604565b6106048688878787878761060e565b333b1561125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b61060686863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061173692505050565b610606863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061053392505050565b600054610100900460ff16158080156113055750600054600160ff909116105b8061131f5750303b15801561131f575060005460ff166001145b6113ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101f3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61142773420000000000000000000000000000000000000783611e00565b801561148a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6114d13385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114d792505050565b50505050565b6114df610f6e565b1561156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e00000000000000000060648201526084016101f3565b8234146115fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101f3565b61160785858584611eea565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd000000000000000000000000000000000000000000000000000000009061166a908b908b9086908a90602401612ba2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116fd92918890600401612beb565b6000604051808303818588803b15801561171657600080fd5b505af115801561172a573d6000803e3d6000fd5b50505050505050505050565b61173f87611a61565b1561188d5761174e8787611ac3565b611800576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101f3565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b50505050611921565b6118af73ffffffffffffffffffffffffffffffffffffffff8816863086611f8b565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546118ed908490612c30565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b61192f878787878786611fe9565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611993908b908d908c908c908c908b90602401612c48565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611a2692918790600401612beb565b600060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b5050505050505050505050565b6000611a8d827f1d1d8b6300000000000000000000000000000000000000000000000000000000612077565b80611abd5750611abd827fec4fc8e300000000000000000000000000000000000000000000000000000000612077565b92915050565b6000611aef837f1d1d8b6300000000000000000000000000000000000000000000000000000000612077565b15611b98578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b639190612b0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611abd565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a829084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261209a565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611d2f93929190612ca3565b60405180910390a46106068686868686866121a6565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611dd293929190612ca3565b60405180910390a46114d18484848461222e565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101f3565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611f7793929190612ca3565b60405180910390a46114d18484848461229b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526114d19085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611c35565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e86868660405161206193929190612ca3565b60405180910390a46106068686868686866122fa565b600061208283612372565b8015612093575061209383836123d6565b9392505050565b60006120fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124a59092919063ffffffff16565b805190915015610a82578080602001905181019061211a9190612ce1565b610a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101f3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161221e93929190612ca3565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161228d929190612d03565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161228d929190612d03565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161221e93929190612ca3565b600061239e827f01ffc9a7000000000000000000000000000000000000000000000000000000006123d6565b8015611abd57506123cf827fffffffff000000000000000000000000000000000000000000000000000000006123d6565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561248e575060208210155b801561249a5750600081115b979650505050505050565b60606124b484846000856124bc565b949350505050565b60608247101561254e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101f3565b73ffffffffffffffffffffffffffffffffffffffff85163b6125cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101f3565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125f59190612d1c565b60006040518083038185875af1925050503d8060008114612632576040519150601f19603f3d011682016040523d82523d6000602084013e612637565b606091505b509150915061249a82828660608315612651575081612093565b8251156126615782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f391906129bb565b73ffffffffffffffffffffffffffffffffffffffff811681146126b757600080fd5b50565b60008083601f8401126126cc57600080fd5b50813567ffffffffffffffff8111156126e457600080fd5b6020830191508360208285010111156126fc57600080fd5b9250929050565b600080600080600080600060c0888a03121561271e57600080fd5b873561272981612695565b9650602088013561273981612695565b9550604088013561274981612695565b9450606088013561275981612695565b93506080880135925060a088013567ffffffffffffffff81111561277c57600080fd5b6127888a828b016126ba565b989b979a50959850939692959293505050565b803563ffffffff811681146127af57600080fd5b919050565b6000806000604084860312156127c957600080fd5b6127d28461279b565b9250602084013567ffffffffffffffff8111156127ee57600080fd5b6127fa868287016126ba565b9497909650939450505050565b60008060008060006080868803121561281f57600080fd5b853561282a81612695565b9450602086013561283a81612695565b935060408601359250606086013567ffffffffffffffff81111561285d57600080fd5b612869888289016126ba565b969995985093965092949392505050565b60008060008060006080868803121561289257600080fd5b853561289d81612695565b9450602086013593506128b26040870161279b565b9250606086013567ffffffffffffffff81111561285d57600080fd5b600080600080600080600060c0888a0312156128e957600080fd5b87356128f481612695565b9650602088013561290481612695565b9550604088013561291481612695565b9450606088013593506129296080890161279b565b925060a088013567ffffffffffffffff81111561277c57600080fd5b60005b83811015612960578181015183820152602001612948565b838111156114d15750506000910152565b60008151808452612989816020860160208601612945565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120936020830184612971565b60008060008060008060a087890312156129e757600080fd5b86356129f281612695565b95506020870135612a0281612695565b945060408701359350612a176060880161279b565b9250608087013567ffffffffffffffff811115612a3357600080fd5b612a3f89828a016126ba565b979a9699509497509295939492505050565b60008060408385031215612a6457600080fd5b8235612a6f81612695565b91506020830135612a7f81612695565b809150509250929050565b600060208284031215612a9c57600080fd5b813561209381612695565b60008060008060608587031215612abd57600080fd5b8435612ac881612695565b9350612ad66020860161279b565b9250604085013567ffffffffffffffff811115612af257600080fd5b612afe878288016126ba565b95989497509550505050565b600060208284031215612b1c57600080fd5b815161209381612695565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612b6857612b68612b27565b500390565b60008060408385031215612b8057600080fd5b8251612b8b81612695565b602084015190925060ff81168114612a7f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612be16080830184612971565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612c1a6060830185612971565b905063ffffffff83166040830152949350505050565b60008219821115612c4357612c43612b27565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c9760c0830184612971565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612cd86060830184612971565b95945050505050565b600060208284031215612cf357600080fd5b8151801515811461209357600080fd5b8281526040602082015260006124b46040830184612971565b60008251612d2e818460208701612945565b919091019291505056fea164736f6c634300080f000a", + Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b620005171760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612d4580620002276000396000f3fe6080604052600436106101635760003560e01c80635c975abb116100c0578063927ede2d11610074578063c4d66de811610059578063c4d66de8146104b7578063c89701a2146104d7578063e11013dd1461050457600080fd5b8063927ede2d14610479578063a3a79548146104a457600080fd5b80637f46ddb2116100a55780637f46ddb2146102ba57806387087623146104135780638f601f661461043357600080fd5b80635c975abb146103ec578063662a633a1461040057600080fd5b806336c717c1116101175780634397dfef116100fc5780634397dfef14610333578063540abf731461037657806354fd4d501461039657600080fd5b806336c717c1146102ba5780633cb747bf1461030657600080fd5b80631635f5fd116101485780631635f5fd1461026a578063213268491461027d57806332b7006d146102a757600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b156101fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023073deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d4060405180602001604052806000815250610533565b005b600080fd5b34801561024357600080fd5b50610230610252366004612703565b61060e565b6102306102653660046127b4565b6109b0565b610230610278366004612807565b610a87565b34801561028957600080fd5b50610292610f6e565b60405190151581526020015b60405180910390f35b6102306102b536600461287a565b610fad565b3480156102c657600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029e565b34801561031257600080fd5b506003546102e19073ffffffffffffffffffffffffffffffffffffffff1681565b34801561033f57600080fd5b50610348611087565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff90911660208301520161029e565b34801561038257600080fd5b506102306103913660046128ce565b611115565b3480156103a257600080fd5b506103df6040518060400160405280601b81526020017f312e392e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b60405161029e91906129bb565b3480156103f857600080fd5b506000610292565b61023061040e366004612703565b61115a565b34801561041f57600080fd5b5061023061042e3660046129ce565b6111cd565b34801561043f57600080fd5b5061046b61044e366004612a51565b600260209081526000928352604080842090915290825290205481565b60405190815260200161029e565b34801561048557600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102e1565b6102306104b23660046129ce565b6112a1565b3480156104c357600080fd5b506102306104d2366004612a8a565b6112e5565b3480156104e357600080fd5b506004546102e19073ffffffffffffffffffffffffffffffffffffffff1681565b610230610512366004612aa7565b61148e565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016105825761057d85858585856114d7565b610606565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f39190612b0a565b905061060487828888888888611736565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106e1575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c99190612b0a565b73ffffffffffffffffffffffffffffffffffffffff16145b610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101f3565b61079c87611a61565b156108ea576107ab8787611ac3565b61085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101f3565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108cd57600080fd5b505af11580156108e1573d6000803e3d6000fd5b5050505061096c565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610928908490612b56565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561096c908585611be3565b610604878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cb792505050565b333b15610a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b610a823333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114d792505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b5a575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b429190612b0a565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101f3565b610c14610f6e565b15610ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e00000000000000000060648201526084016101f3565b823414610d30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101f3565b3073ffffffffffffffffffffffffffffffffffffffff851603610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101f3565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101f3565b610ec285858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d4592505050565b6000610edf855a8660405180602001604052806000815250611de6565b905080610606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101f3565b600080610f79611087565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b333b1561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b611080853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061053392505050565b5050505050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa1580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612b6d565b90939092509050565b61060487873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061173692505050565b73ffffffffffffffffffffffffffffffffffffffff87161580156111a7575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b156111be576111b98585858585610a87565b610604565b6106048688878787878761060e565b333b1561125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b61060686863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061173692505050565b610606863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061053392505050565b600054610100900460ff16158080156113055750600054600160ff909116105b8061131f5750303b15801561131f575060005460ff166001145b6113ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101f3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61142773420000000000000000000000000000000000000783611e00565b801561148a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6114d13385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114d792505050565b50505050565b6114df610f6e565b1561156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e00000000000000000060648201526084016101f3565b8234146115fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101f3565b61160785858584611eea565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd000000000000000000000000000000000000000000000000000000009061166a908b908b9086908a90602401612ba2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116fd92918890600401612beb565b6000604051808303818588803b15801561171657600080fd5b505af115801561172a573d6000803e3d6000fd5b50505050505050505050565b61173f87611a61565b1561188d5761174e8787611ac3565b611800576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101f3565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b50505050611921565b6118af73ffffffffffffffffffffffffffffffffffffffff8816863086611f8b565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546118ed908490612c30565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b61192f878787878786611fe9565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611993908b908d908c908c908c908b90602401612c48565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611a2692918790600401612beb565b600060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b5050505050505050505050565b6000611a8d827f1d1d8b6300000000000000000000000000000000000000000000000000000000612077565b80611abd5750611abd827fec4fc8e300000000000000000000000000000000000000000000000000000000612077565b92915050565b6000611aef837f1d1d8b6300000000000000000000000000000000000000000000000000000000612077565b15611b98578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b639190612b0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611abd565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a829084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261209a565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611d2f93929190612ca3565b60405180910390a46106068686868686866121a6565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611dd293929190612ca3565b60405180910390a46114d18484848461222e565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101f3565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611f7793929190612ca3565b60405180910390a46114d18484848461229b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526114d19085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611c35565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e86868660405161206193929190612ca3565b60405180910390a46106068686868686866122fa565b600061208283612372565b8015612093575061209383836123d6565b9392505050565b60006120fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124a59092919063ffffffff16565b805190915015610a82578080602001905181019061211a9190612ce1565b610a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101f3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161221e93929190612ca3565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161228d929190612d03565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161228d929190612d03565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161221e93929190612ca3565b600061239e827f01ffc9a7000000000000000000000000000000000000000000000000000000006123d6565b8015611abd57506123cf827fffffffff000000000000000000000000000000000000000000000000000000006123d6565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561248e575060208210155b801561249a5750600081115b979650505050505050565b60606124b484846000856124bc565b949350505050565b60608247101561254e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101f3565b73ffffffffffffffffffffffffffffffffffffffff85163b6125cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101f3565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125f59190612d1c565b60006040518083038185875af1925050503d8060008114612632576040519150601f19603f3d011682016040523d82523d6000602084013e612637565b606091505b509150915061249a82828660608315612651575081612093565b8251156126615782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f391906129bb565b73ffffffffffffffffffffffffffffffffffffffff811681146126b757600080fd5b50565b60008083601f8401126126cc57600080fd5b50813567ffffffffffffffff8111156126e457600080fd5b6020830191508360208285010111156126fc57600080fd5b9250929050565b600080600080600080600060c0888a03121561271e57600080fd5b873561272981612695565b9650602088013561273981612695565b9550604088013561274981612695565b9450606088013561275981612695565b93506080880135925060a088013567ffffffffffffffff81111561277c57600080fd5b6127888a828b016126ba565b989b979a50959850939692959293505050565b803563ffffffff811681146127af57600080fd5b919050565b6000806000604084860312156127c957600080fd5b6127d28461279b565b9250602084013567ffffffffffffffff8111156127ee57600080fd5b6127fa868287016126ba565b9497909650939450505050565b60008060008060006080868803121561281f57600080fd5b853561282a81612695565b9450602086013561283a81612695565b935060408601359250606086013567ffffffffffffffff81111561285d57600080fd5b612869888289016126ba565b969995985093965092949392505050565b60008060008060006080868803121561289257600080fd5b853561289d81612695565b9450602086013593506128b26040870161279b565b9250606086013567ffffffffffffffff81111561285d57600080fd5b600080600080600080600060c0888a0312156128e957600080fd5b87356128f481612695565b9650602088013561290481612695565b9550604088013561291481612695565b9450606088013593506129296080890161279b565b925060a088013567ffffffffffffffff81111561277c57600080fd5b60005b83811015612960578181015183820152602001612948565b838111156114d15750506000910152565b60008151808452612989816020860160208601612945565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120936020830184612971565b60008060008060008060a087890312156129e757600080fd5b86356129f281612695565b95506020870135612a0281612695565b945060408701359350612a176060880161279b565b9250608087013567ffffffffffffffff811115612a3357600080fd5b612a3f89828a016126ba565b979a9699509497509295939492505050565b60008060408385031215612a6457600080fd5b8235612a6f81612695565b91506020830135612a7f81612695565b809150509250929050565b600060208284031215612a9c57600080fd5b813561209381612695565b60008060008060608587031215612abd57600080fd5b8435612ac881612695565b9350612ad66020860161279b565b9250604085013567ffffffffffffffff811115612af257600080fd5b612afe878288016126ba565b95989497509550505050565b600060208284031215612b1c57600080fd5b815161209381612695565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612b6857612b68612b27565b500390565b60008060408385031215612b8057600080fd5b8251612b8b81612695565b602084015190925060ff81168114612a7f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612be16080830184612971565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612c1a6060830185612971565b905063ffffffff83166040830152949350505050565b60008219821115612c4357612c43612b27565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c9760c0830184612971565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612cd86060830184612971565b95945050505050565b600060208284031215612cf357600080fd5b8151801515811461209357600080fd5b8281526040602082015260006124b46040830184612971565b60008251612d2e818460208701612945565b919091019291505056fea164736f6c634300080f000a", } // L2StandardBridgeABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/optimismportal.go b/op-bindings/bindings/optimismportal.go index 91b57c6132d..743838c91bd 100644 --- a/op-bindings/bindings/optimismportal.go +++ b/op-bindings/bindings/optimismportal.go @@ -48,8 +48,8 @@ type TypesWithdrawalTransaction struct { // OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract. var OptimismPortalMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"balance\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositERC20Transaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_mint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l2Oracle\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isOutputFinalized\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"paused_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provenWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2OutputIndex\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGasPayingToken\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_symbol\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LargeCalldata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoValue\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCustomGasToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SmallGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[]}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200209f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616019806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615439565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b636600461556d565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156bf565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156d2565b611089565b34801561036257600080fd5b506101936103713660046156fa565b611144565b34801561038257600080fd5b50610193610391366004615740565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156d2565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b36600461577d565b611dde565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611df7565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615798565b611e51565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156d2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157e3565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120bb565b506106738282612267565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615860565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612534565b6107bd89826158a8565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615860565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a8565b909155506108a890508a8a8a8a8a8a6120bb565b50506108b48282612267565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158c0565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158fa565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190615937565b519050610ba4610b9f3686900386018661599c565b612610565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d8761266c565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190615937565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a615a02565b8a6040013561269c565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a86565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190615937565b602001516fffffffffffffffffffffffffffffffff166126c0565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a162013880612766565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615aa3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156bf565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f98261266c565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615860565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126c0565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190615937565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126c0565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127c2565b9150611d27565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cfe57856060015160386000828254611b5d9190615b08565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190615860565b9050611c28876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166128209092919063ffffffff16565b6060870151611c379082615b08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615860565b14611cfc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d2257611acd8660400151876080015160008960a001516127c2565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8990851515815260200190565b60405180910390a281158015611d9f5750326001145b15611dd6576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611deb826010615b1f565b61113e90615208615b4f565b600080611e026108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e49574791505090565b505060385490565b600054610100900460ff1615808015611e715750600054600160ff909116105b80611e8b5750303b158015611e8b575060005460ff166001145b611f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f7557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61203661287b565b801561209957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120dd575073ffffffffffffffffffffffffffffffffffffffff861615155b15612114576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211e8151611dde565b67ffffffffffffffff168367ffffffffffffffff16101561216b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121ca575033731111000000000000000000000000000000001111015b600086868686866040516020016121e5959493929190615aa3565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225591906156bf565b60405180910390a45050505050505050565b60015460009061229d907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b08565b905060006122a961298e565b90506000816020015160ff16826000015163ffffffff166122ca9190615baa565b9050821561240157600154600090612301908390700100000000000000000000000000000000900467ffffffffffffffff16615c12565b90506000836040015160ff16836123189190615c86565b6001546123389084906fffffffffffffffffffffffffffffffff16615c86565b6123429190615baa565b6001549091506000906123939061236c9084906fffffffffffffffffffffffffffffffff16615d42565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a4f565b905060018611156123c2576123bf61236c82876040015160ff1660018a6123ba9190615b08565b612a6e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612434908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124c1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124ed906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615db6565b905060006124ff48633b9aca00612ac3565b6125099083615df3565b905060005a6125189088615b08565b9050808211156108b4576108b461252f8284615b08565b612ada565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120999085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b03565b6000816000015182602001518360400151846060015160405160200161264f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a0880151935160009761264f979096959101615e07565b6000806126a886612c0f565b90506126b681868686612c41565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615860565b61275e90836158a8565b421192915050565b60018054829190601090612799908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127d2866000612c71565b905080612808576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526128769084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161258e565b505050565b600054610100900460ff16612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e72565b6000612a64612a5e8585612c8f565b83612c9f565b90505b9392505050565b6000670de0b6b3a7640000612aaf612a868583615baa565b612a9890670de0b6b3a7640000615c12565b612aaa85670de0b6b3a7640000615c86565b612cae565b612ab99086615c86565b612a649190615baa565b600081831015612ad35781612a67565b5090919050565b6000805a90505b825a612aed9083615b08565b101561287657612afc82615f15565b9150612ae1565b6000612b65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cdf9092919063ffffffff16565b8051909150156128765780806020019051810190612b839190615a86565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2b91815260200190565b6040516020818303038152906040529050919050565b6000612c6884612c52878686612cee565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ad35781612a67565b6000818312612ad35781612a67565b6000612a67670de0b6b3a764000083612cc68661376c565b612cd09190615c86565b612cda9190615baa565b6139b0565b6060612a648484600085613bef565b60606000845111612d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d6684613d85565b90506000612d7386613e71565b9050600084604051602001612d8a91815260200190565b60405160208183030381529060405290506000805b84518110156136e3576000858281518110612dbc57612dbc615f4d565b602002602001015190508451831115612e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f105780518051602091820120604051612ea592612e7f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b613067565b805151602011612fc65780518051602091820120604051612f3a92612e7f92910190815260200190565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b805184516020808701919091208251919092012014613067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b613073601060016158a8565b8160200151510361324f57845183036131e7576130ad81602001516010815181106130a0576130a0615f4d565b6020026020010151613ed4565b96506000875111613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b6001865161314e9190615b08565b82146131dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a67565b60008584815181106131fb576131fb615f4d565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061322657613226615f4d565b6020026020010151905061323981614034565b95506132466001866158a8565b945050506136d0565b60028160200151510361364857600061326782614059565b905060008160008151811061327e5761327e615f4d565b016020015160f81c90506000613295600283615f7c565b6132a0906002615f9e565b905060006132b1848360ff1661407d565b905060006132bf8a8961407d565b905060006132cd83836140b3565b90508083511461335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff851660021480613374575060ff85166003145b156135635780825114613409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61342387602001516001815181106130a0576130a0615f4d565b9c5060008d51116134b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134c49190615b08565b8814613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a67565b60ff85161580613576575060ff85166001145b156135b5576135a2876020015160018151811061359557613595615f4d565b6020026020010151614034565b99506135ae818a6158a8565b985061363d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136d0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136db81615f15565b915050612d9f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137e484614167565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139e157506000919050565b680755bf798b4a1bf1e58212613a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d289190615fc1565b60006040518083038185875af1925050503d8060008114613d65576040519150601f19603f3d011682016040523d82523d6000602084013e613d6a565b606091505b5091509150613d7a82828661423d565b979650505050505050565b80516060908067ffffffffffffffff811115613da357613da361532d565b604051908082528060200260200182016040528015613de857816020015b6040805180820190915260608082526020820152815260200190600190039081613dc15790505b50915060005b81811015613e6a576040518060400160405280858381518110613e1357613e13615f4d565b60200260200101518152602001613e42868481518110613e3557613e35615f4d565b6020026020010151614290565b815250838281518110613e5757613e57615f4d565b6020908102919091010152600101613dee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec9578060011b82018184015160001a8060041c8253600f811660018301535050600101613e9b565b509295945050505050565b60606000806000613ee4856142a3565b919450925090506000816001811115613eff57613eff615fdd565b14613f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f9682846158a8565b855114614025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6885602001518484614d10565b606060208260000151106140505761404b82613ed4565b61113e565b61113e82614da4565b606061113e61407883602001516000815181106130a0576130a0615f4d565b613e71565b60608251821061409c575060408051602081019091526000815261113e565b612a6783838486516140ae9190615b08565b614dba565b60008082518451106140c65782516140c9565b83515b90505b808210801561415057508282815181106140e8576140e8615f4d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061412757614127615f4d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614160578160010191506140cc565b5092915050565b60008082116141d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561424c575081612a67565b82511561425c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156bf565b606061113e61429e83614f92565b61507b565b600080600080846000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f8111614386576000600160009450945094505050614d09565b60b7811161459457600061439b608083615b08565b905080876000015111614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144cf57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d09915050565b60bf81116148e25760006145a960b783615b08565b905080876000015111614664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61481081846158a8565b8951116148c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148d08360016158a8565b9750955060009450614d099350505050565b60f781116149c35760006148f760c083615b08565b9050808760000151116149b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d09915050565b60006149d060f783615b08565b905080876000015111614a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c3781846158a8565b895111614cec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cf78360016158a8565b9750955060019450614d099350505050565b9193909250565b60608167ffffffffffffffff811115614d2b57614d2b61532d565b6040519080825280601f01601f191660200182016040528015614d55576020820181803683370190505b5090508115612a67576000614d6a84866158a8565b90506020820160005b84811015614d8b578281015182820152602001614d73565b84811115614d9a576000858301525b5050509392505050565b606061113e826020015160008460000151614d10565b60608182601f011015614e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f215760405191506000825260208201604052614f89565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f5a578051835260209283019201614f42565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161505d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b6060600080600061508b856142a3565b9194509250905060018160018111156150a6576150a6615fdd565b14615133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513f83856158a8565b146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151e35790505093506000835b86518110156152d1576000806152566040518060400160405280858c6000015161523a9190615b08565b8152602001858c6020015161524f91906158a8565b90526142a3565b50915091506040518060400160405280838361527291906158a8565b8152602001848b6020015161528791906158a8565b81525088858151811061529c5761529c615f4d565b60209081029190910101526152b26001856158a8565b93506152be81836158a8565b6152c890846158a8565b92505050615210565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152ff57600080fd5b50565b803567ffffffffffffffff8116811461531a57600080fd5b919050565b80151581146152ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153a3576153a361532d565b604052919050565b600082601f8301126153bc57600080fd5b813567ffffffffffffffff8111156153d6576153d661532d565b61540760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161535c565b81815284602083860101111561541c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561545257600080fd5b863561545d816152dd565b9550602087013594506040870135935061547960608801615302565b925060808701356154898161531f565b915060a087013567ffffffffffffffff8111156154a557600080fd5b6154b189828a016153ab565b9150509295509295509295565b600060c082840312156154d057600080fd5b60405160c0810167ffffffffffffffff82821081831117156154f4576154f461532d565b81604052829350843583526020850135915061550f826152dd565b81602084015260408501359150615525826152dd565b816040840152606085013560608401526080850135608084015260a085013591508082111561555357600080fd5b50615560858286016153ab565b60a0830152505092915050565b600080600080600085870360e081121561558657600080fd5b863567ffffffffffffffff8082111561559e57600080fd5b6155aa8a838b016154be565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155e357600080fd5b60408901955060c08901359250808311156155fd57600080fd5b828901925089601f84011261561157600080fd5b823591508082111561562257600080fd5b508860208260051b840101111561563857600080fd5b959894975092955050506020019190565b60005b8381101561566457818101518382015260200161564c565b838111156120995750506000910152565b6000815180845261568d816020860160208601615649565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a676020830184615675565b6000602082840312156156e457600080fd5b5035919050565b60ff811681146152ff57600080fd5b6000806000806080858703121561571057600080fd5b843561571b816152dd565b9350602085013561572b816156eb565b93969395505050506040820135916060013590565b60006020828403121561575257600080fd5b813567ffffffffffffffff81111561576957600080fd5b615775848285016154be565b949350505050565b60006020828403121561578f57600080fd5b612a6782615302565b6000806000606084860312156157ad57600080fd5b83356157b8816152dd565b925060208401356157c8816152dd565b915060408401356157d8816152dd565b809150509250925092565b600080600080600060a086880312156157fb57600080fd5b8535615806816152dd565b94506020860135935061581b60408701615302565b9250606086013561582b8161531f565b9150608086013567ffffffffffffffff81111561584757600080fd5b615853888289016153ab565b9150509295509295909350565b60006020828403121561587257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158bb576158bb615879565b500190565b600080604083850312156158d357600080fd5b82516158de816152dd565b60208401519092506158ef816156eb565b809150509250929050565b60006020828403121561590c57600080fd5b8151612a67816152dd565b80516fffffffffffffffffffffffffffffffff8116811461531a57600080fd5b60006060828403121561594957600080fd5b6040516060810181811067ffffffffffffffff8211171561596c5761596c61532d565b6040528251815261597f60208401615917565b602082015261599060408401615917565b60408201529392505050565b6000608082840312156159ae57600080fd5b6040516080810181811067ffffffffffffffff821117156159d1576159d161532d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1d57615a1d61532d565b8360051b6020615a2e81830161535c565b868152918501918181019036841115615a4657600080fd5b865b84811015615a7a57803586811115615a605760008081fd5b615a6c36828b016153ab565b845250918301918301615a48565b50979650505050505050565b600060208284031215615a9857600080fd5b8151612a678161531f565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615af7816049850160208701615649565b919091016049019695505050505050565b600082821015615b1a57615b1a615879565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b4657615b46615879565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b7257615b72615879565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb957615bb9615b7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0d57615c0d615879565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4c57615c4c615879565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c8057615c80615879565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cc757615cc7615879565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615d0257615d02615879565b60008712925087820587128484161615615d1e57615d1e615879565b87850587128184161615615d3457615d34615879565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7c57615d7c615879565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615db057615db0615879565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615dee57615dee615879565b500290565b600082615e0257615e02615b7b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e5260c0830184615675565b98975050505050505050565b805163ffffffff8116811461531a57600080fd5b600060c08284031215615e8457600080fd5b60405160c0810181811067ffffffffffffffff82111715615ea757615ea761532d565b604052615eb383615e5e565b81526020830151615ec3816156eb565b60208201526040830151615ed6816156eb565b6040820152615ee760608401615e5e565b6060820152615ef860808401615e5e565b6080820152615f0960a08401615917565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f4657615f46615879565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8f57615f8f615b7b565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb857615fb8615879565b90039392505050565b60008251615fd3818460208701615649565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"balance\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositERC20Transaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_mint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l2Oracle\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isOutputFinalized\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"paused_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provenWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2OutputIndex\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGasPayingToken\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_symbol\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LargeCalldata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoValue\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonReentrant\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCustomGasToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SmallGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[]}]", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", } // OptimismPortalABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/systemconfig.go b/op-bindings/bindings/systemconfig.go index bd1f15cc016..56d8e4ba303 100644 --- a/op-bindings/bindings/systemconfig.go +++ b/op-bindings/bindings/systemconfig.go @@ -51,8 +51,8 @@ type SystemConfigAddresses struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_OUTPUT_ORACLE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasPayingToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2OutputOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setResourceConfig\",\"inputs\":[{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b50620000496200003260016000805160206200382983398151915262001086565b60001b600019620000d160201b62000ed21760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b620012af565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000ed61760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000ed21760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001086565b60001b84620000d160201b62000ed21760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001086565b60001b8360000151620000d160201b62000ed21760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001086565b60001b8360200151620000d160201b62000ed21760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001086565b60001b8360400151620000d160201b62000ed21760201c565b6200038f6200037660017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181662001086565b60001b8360600151620000d160201b62000ed21760201c565b620003c8620003af60016000805160206200380983398151915262001086565b60001b8360800151620000d160201b62000ed21760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001086565b60001b8360a00151620000d160201b62000ed21760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a15565b6200044162000d59565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d86565b565b6200056762000ded565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e49565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b6000600080516020620037c983398151915283604051620006229190620010cf565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f19818403018152919052905060016000600080516020620037c983398151915283604051620006859190620010cf565b60405180910390a3505050565b6200069c62000d59565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200382983398151915262001086565b60001b62000e9b60201b620006a41760201c565b6000036200055b576200055b6200078b60016000805160206200382983398151915262001086565b60001b43620000d160201b62000ed21760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000820573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000846919062001104565b60ff1614620008af5760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b60006200092f826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200091e919081019062001146565b62000e9f60201b62000ef21760201c565b9050600062000976836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b905062000992836012848462000f3760201b62000f951760201c565b6200099c62001024565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b158015620009f757600080fd5b505af115801562000a0c573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000aa45760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b155760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b379190620011fe565b63ffffffff16111562000b7c5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b6000816020015160ff161162000bed5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c0f90829062001229565b62000c1b91906200125b565b63ffffffff161462000c965760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d819063ffffffff6a01000000000000000000008204811691166200128a565b905090565b600054610100900460ff1662000de25760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e49565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b600060208251111562000f1b5760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f31826200104660201b620010671760201c565b92915050565b62000f9262000f6860017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec62001086565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000ed21760201c565b62000fd862000fc360017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001086565b60001b83620000d160201b62000ed21760201c565b6200101e6200100960017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001086565b60001b82620000d160201b62000ed21760201c565b50505050565b600062000d816200074f60016000805160206200380983398151915262001086565b8051602181106200105f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b634e487b7160e01b600052601160045260246000fd5b6000828210156200109b576200109b62001070565b500390565b60005b83811015620010bd578181015183820152602001620010a3565b838111156200101e5750506000910152565b6020815260008251806020840152620010f0816040850160208701620010a0565b601f01601f19169190910160400192915050565b6000602082840312156200111757600080fd5b815160ff811681146200112957600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200115957600080fd5b81516001600160401b03808211156200117157600080fd5b818401915084601f8301126200118657600080fd5b8151818111156200119b576200119b62001130565b604051601f8201601f19908116603f01168101908382118183101715620011c657620011c662001130565b81604052828152876020848701011115620011e057600080fd5b620011f3836020830160208801620010a0565b979650505050505050565b600063ffffffff80831681851680830382111562001220576200122062001070565b01949350505050565b600063ffffffff808416806200124f57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562001281576200128162001070565b02949350505050565b60006001600160401b0382811684821680830382111562001220576200122062001070565b6124ea80620012bf6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063935f029e11610160578063d8444715116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461062e578063fd32aa0f14610636578063ffa1ad741461063e57600080fd5b8063f45e65d814610611578063f68016b71461061a57600080fd5b8063e0e2016d116100bd578063e0e2016d146105ed578063e81b2c6d146105f5578063f2fde38b146105fe57600080fd5b8063d8444715146105dd578063dac6e63a146105e557600080fd5b8063bc49ce5f1161012f578063c71973f611610114578063c71973f614610483578063c9b26f6114610496578063cc731b02146104a957600080fd5b8063bc49ce5f14610473578063c4e8ddfa1461047b57600080fd5b8063935f029e1461043d5780639b7d7f0a14610450578063a711986914610458578063b40a817c1461046057600080fd5b80634add321d1161020e578063550fcdc9116101c257806361d15768116101a757806361d157681461040f578063715018a6146104175780638da5cb5b1461041f57600080fd5b8063550fcdc9146103ff5780635d73369c1461040757600080fd5b80634d9f1559116101f35780634d9f1559146103875780634f16540b1461038f57806354fd4d50146103b657600080fd5b80634add321d146103535780634c1e843d1461037457600080fd5b806318d13918116102655780631fd19ee11161024a5780631fd19ee11461030d5780634397dfef1461031557806348cd4cb11461034b57600080fd5b806318d13918146102f057806319f5cea81461030557600080fd5b806306c9265714610297578063078f29cf146102b25780630a49cb03146102df5780630c18c162146102e7575b600080fd5b61029f610646565b6040519081526020015b60405180910390f35b6102ba610674565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a9565b6102ba6106ad565b61029f60655481565b6103036102fe366004611f41565b6106dd565b005b61029f6106f1565b6102ba61071c565b61031d610746565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102a9565b61029f61075a565b61035b61078a565b60405167ffffffffffffffff90911681526020016102a9565b6103036103823660046120b4565b6107b0565b6102ba610bbb565b61029f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103f26040518060400160405280600681526020017f312e31322e30000000000000000000000000000000000000000000000000000081525081565b6040516102a99190612269565b6103f2610beb565b61029f610bf5565b61029f610c20565b610303610c4b565b60335473ffffffffffffffffffffffffffffffffffffffff166102ba565b61030361044b36600461227c565b610c5f565b6102ba610c75565b6102ba610ca5565b61030361046e36600461229e565b610cd5565b61029f610ce6565b6102ba610d11565b6103036104913660046122b9565b610d41565b6103036104a43660046122d5565b610d52565b61056d6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102a99190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6103f2610d63565b6102ba610d6d565b61029f610d9d565b61029f60675481565b61030361060c366004611f41565b610dc8565b61029f60665481565b60685461035b9067ffffffffffffffff1681565b61029f610e7c565b61029f610ea7565b61029f600081565b61067160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b81565b60006106a86106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b5490565b905090565b60006106a86106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b6106e5611090565b6106ee81611111565b50565b61067160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60006106a87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107516111ce565b90939092509050565b60006106a86106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b6069546000906106a89063ffffffff6a0100000000000000000000820481169116612334565b600054610100900460ff16158080156107d05750600054600160ff909116105b806107ea5750303b1580156107ea575060005460ff166001145b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108e161124b565b6108ea8a610dc8565b6108f3876112ea565b6108fd8989611312565b610906866113a3565b61092f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b61096261095d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b849055565b61099661099060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b83519055565b6109cd6109c460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60208401519055565b610a046109fb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b60408401519055565b610a3b610a3260017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181661231d565b60608401519055565b610a72610a6960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b60808401519055565b610aa9610aa060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60a08401519055565b610ab1611481565b610abe8260c001516114e9565b610ac7846117e2565b610acf61078a565b67ffffffffffffffff168667ffffffffffffffff161015610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b8015610baf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60006106a86106a460017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181661231d565b60606106a8611c56565b61067160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b61067160017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181661231d565b610c53611090565b610c5d6000611d17565b565b610c67611090565b610c718282611312565b5050565b60006106a86106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60006106a86106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610cdd611090565b6106ee816113a3565b61067160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b60006106a86106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b610d49611090565b6106ee816117e2565b610d5a611090565b6106ee816112ea565b60606106a8611d8e565b60006106a86106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b61067160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b610dd0611090565b73ffffffffffffffffffffffffffffffffffffffff8116610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610872565b6106ee81611d17565b61067160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b61067160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e203332206279746573000000000000000000006064820152608401610872565b610f8f82611067565b92915050565b610ffb610fc360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61102e61102960017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b839055565b61106161105c60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b829055565b50505050565b80516021811061107f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610872565b61113a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516111c29190612269565b60405180910390a35050565b600080806112006106a460017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261123f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b600054610100900460ff166112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c5d611e44565b6067819055604080516020808201849052825180830390910181529082019091526000611191565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113969190612269565b60405180910390a3505050565b6113ab61078a565b67ffffffffffffffff168167ffffffffffffffff161015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611191565b6114af6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b600003610c5d57610c5d6114e460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611538575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b156106ee57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190612360565b60ff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e0000000000000000000000000000000000006064820152608401610872565b60006116dc8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116d7919081019061237d565b610ef2565b9050600061172e8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b905061173d8360128484610f95565b6117456106ad565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610872565b6001816040015160ff1611611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610872565b6068546080820151825167ffffffffffffffff9092169161194a9190612448565b63ffffffff1611156119b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b6000816020015160ff1611611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610872565b8051602082015163ffffffff82169160ff90911690611a6f908290612467565b611a7991906124b1565b63ffffffff1614611b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610872565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611c626111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cdb57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b611ee4565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611d9a6111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e1357505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b600054610100900460ff16611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c5d33611d17565b60405160005b82811a15611efa57600101611eea565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f3c57600080fd5b919050565b600060208284031215611f5357600080fd5b611f5c82611f18565b9392505050565b803567ffffffffffffffff81168114611f3c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611fcd57611fcd611f7b565b60405290565b803563ffffffff81168114611f3c57600080fd5b60ff811681146106ee57600080fd5b600060c0828403121561200857600080fd5b60405160c0810181811067ffffffffffffffff8211171561202b5761202b611f7b565b60405290508061203a83611fd3565b8152602083013561204a81611fe7565b6020820152604083013561205d81611fe7565b604082015261206e60608401611fd3565b606082015261207f60808401611fd3565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146120a757600080fd5b60a0919091015292915050565b6000806000806000806000806000898b036102808112156120d457600080fd5b6120dd8b611f18565b995060208b0135985060408b0135975060608b0135965061210060808c01611f63565b955061210e60a08c01611f18565b945061211d8c60c08d01611ff6565b935061212c6101808c01611f18565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe608201121561215e57600080fd5b50612167611faa565b6121746101a08c01611f18565b81526121836101c08c01611f18565b60208201526121956101e08c01611f18565b60408201526121a76102008c01611f18565b60608201526121b96102208c01611f18565b60808201526121cb6102408c01611f18565b60a08201526121dd6102608c01611f18565b60c0820152809150509295985092959850929598565b60005b8381101561220e5781810151838201526020016121f6565b838111156110615750506000910152565b600081518084526122378160208601602086016121f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f5c602083018461221f565b6000806040838503121561228f57600080fd5b50508035926020909101359150565b6000602082840312156122b057600080fd5b611f5c82611f63565b600060c082840312156122cb57600080fd5b611f5c8383611ff6565b6000602082840312156122e757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561232f5761232f6122ee565b500390565b600067ffffffffffffffff808316818516808303821115612357576123576122ee565b01949350505050565b60006020828403121561237257600080fd5b8151611f5c81611fe7565b60006020828403121561238f57600080fd5b815167ffffffffffffffff808211156123a757600080fd5b818401915084601f8301126123bb57600080fd5b8151818111156123cd576123cd611f7b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561241357612413611f7b565b8160405282815287602084870101111561242c57600080fd5b61243d8360208301602088016121f3565b979650505050505050565b600063ffffffff808316818516808303821115612357576123576122ee565b600063ffffffff808416806124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156124d4576124d46122ee565b0294935050505056fea164736f6c634300080f000a53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_OUTPUT_ORACLE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasPayingToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2OutputOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setResourceConfig\",\"inputs\":[{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b50620000496200003260016000805160206200398783398151915262001141565b60001b600019620000d160201b62000f441760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b6200136a565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000f481760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000f441760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001141565b60001b84620000d160201b62000f441760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001141565b60001b8360000151620000d160201b62000f441760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001141565b60001b8360200151620000d160201b62000f441760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001141565b60001b8360400151620000d160201b62000f441760201c565b6200038f6200037660017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181662001141565b60001b8360600151620000d160201b62000f441760201c565b620003c8620003af60016000805160206200396783398151915262001141565b60001b8360800151620000d160201b62000f441760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001141565b60001b8360a00151620000d160201b62000f441760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a29565b6200044162000d6d565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d9a565b565b6200056762000e01565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e5d565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062003927833981519152836040516200062291906200118a565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062003927833981519152836040516200068591906200118a565b60405180910390a3505050565b6200069c62000d6d565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200398783398151915262001141565b60001b62000eaf60201b620006d71760201c565b6000036200055b576200055b6200078b60016000805160206200398783398151915262001141565b60001b43620000d160201b62000f441760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015620007ea5750620007e862000eb3565b155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085a9190620011bf565b60ff1614620008c35760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b600062000943826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000932919081019062001201565b62000ee760201b62000f641760201c565b905060006200098a836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b9050620009a6836012848462000f7f60201b620010071760201c565b620009b06200105b565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801562000a0b57600080fd5b505af115801562000a20573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000ab85760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b295760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b4b9190620012b9565b63ffffffff16111562000b905760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b6000816020015160ff161162000c015760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c23908290620012e4565b62000c2f919062001316565b63ffffffff161462000caa5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d959063ffffffff6a010000000000000000000082048116911662001345565b905090565b600054610100900460ff1662000df65760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e5d565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b60008062000ec06200107d565b506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b600060208251111562000f635760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f79826200109e60201b620010d91760201c565b92915050565b62000fc962000f9f6001600080516020620038e783398151915262001141565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000f441760201c565b6200100f62000ffa60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001141565b60001b83620000d160201b62000f441760201c565b620010556200104060017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001141565b60001b82620000d160201b62000f441760201c565b50505050565b600062000d956200074f60016000805160206200396783398151915262001141565b60008062001095620010c860201b620011021760201c565b90939092509050565b805160218110620010b75763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60008080620010ec6200074f6001600080516020620038e783398151915262001141565b6001600160a01b03811693509050826200111f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b634e487b7160e01b600052601160045260246000fd5b6000828210156200115657620011566200112b565b500390565b60005b83811015620011785781810151838201526020016200115e565b83811115620010555750506000910152565b6020815260008251806020840152620011ab8160408501602087016200115b565b601f01601f19169190910160400192915050565b600060208284031215620011d257600080fd5b815160ff81168114620011e457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200121457600080fd5b81516001600160401b03808211156200122c57600080fd5b818401915084601f8301126200124157600080fd5b815181811115620012565762001256620011eb565b604051601f8201601f19908116603f01168101908382118183101715620012815762001281620011eb565b816040528281528760208487010111156200129b57600080fd5b620012ae8360208301602088016200115b565b979650505050505050565b600063ffffffff808316818516808303821115620012db57620012db6200112b565b01949350505050565b600063ffffffff808416806200130a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156200133c576200133c6200112b565b02949350505050565b60006001600160401b03828116848216808303821115620012db57620012db6200112b565b61256d806200137a6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80638da5cb5b1161017b578063d8444715116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e0e2016d116100bd578063e0e2016d14610620578063e81b2c6d14610628578063f2fde38b1461063157600080fd5b8063d844471514610610578063dac6e63a1461061857600080fd5b8063bc49ce5f1161012f578063c71973f611610114578063c71973f6146104b6578063c9b26f61146104c9578063cc731b02146104dc57600080fd5b8063bc49ce5f146104a6578063c4e8ddfa146104ae57600080fd5b80639b7d7f0a116101605780639b7d7f0a14610483578063a71198691461048b578063b40a817c1461049357600080fd5b80638da5cb5b14610452578063935f029e1461047057600080fd5b806348cd4cb11161022957806354fd4d50116101dd5780635d73369c116101c25780635d73369c1461043a57806361d1576814610442578063715018a61461044a57600080fd5b806354fd4d50146103e9578063550fcdc91461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634d9f1559146103ba5780634f16540b146103c257600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102d5610c2d565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6104256040518060400160405280601c81526020017f312e31322e302d626574612b637573746f6d2d6761732d746f6b656e0000000081525081565b6040516102c491906122ec565b610425610c5d565b6102ba610c67565b6102ba610c92565b61031e610cbd565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61047e3660046122ff565b610cd1565b6102d5610ce7565b6102d5610d17565b61031e6104a1366004612321565b610d47565b6102ba610d58565b6102d5610d83565b61031e6104c436600461233c565b610db3565b61031e6104d7366004612358565b610dc4565b6105a06040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b610425610dd5565b6102d5610ddf565b6102ba610e0f565b6102ba60675481565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a68718166123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60006106db6106d760017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a68718166123a0565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b6106a460017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a68718166123a0565b610cc561117f565b610ccf6000611d9a565b565b610cd961117f565b610ce38282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610d4f61117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610dbb61117f565b61072181611865565b610dcc61117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610ccf611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610ccf57610ccf61155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610ccf33611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -732,6 +732,37 @@ func (_SystemConfig *SystemConfigCallerSession) GasPayingTokenSymbol() (string, return _SystemConfig.Contract.GasPayingTokenSymbol(&_SystemConfig.CallOpts) } +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_SystemConfig *SystemConfigCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "isCustomGasToken") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_SystemConfig *SystemConfigSession) IsCustomGasToken() (bool, error) { + return _SystemConfig.Contract.IsCustomGasToken(&_SystemConfig.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_SystemConfig *SystemConfigCallerSession) IsCustomGasToken() (bool, error) { + return _SystemConfig.Contract.IsCustomGasToken(&_SystemConfig.CallOpts) +} + // L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // // Solidity: function l1CrossDomainMessenger() view returns(address addr_) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 29f699044b4..59b26af2fd2 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,24 +16,24 @@ "sourceCodeHash": "0xc59b8574531162e016d7342aeb6e79d05574e90dbea6c0e5ede35b65010ad894" }, "src/L1/L1CrossDomainMessenger.sol": { - "initCodeHash": "0x8f99a4f81ed307b4aebd63c5576e2a546df6259a5c25d4f7e3e875cda9efaab3", - "sourceCodeHash": "0x9eb2d966cf3d2d13920d2416fea2f418d34e2b000cc4e400c8b43634cdaa1188" + "initCodeHash": "0xb2e15eaa5af5e84097416ccd85233fe3af8d2f0a5de44d8cf9b42d98d7297a03", + "sourceCodeHash": "0x91a48b1e5b84241e52465b936d721e37387b9410dcedb4d846db79289e80d837" }, "src/L1/L1ERC721Bridge.sol": { "initCodeHash": "0xec73b46e68ea29298707f7b9709e7948afe303907b6c4e8b161e2ded2c85ee9c", "sourceCodeHash": "0xd57acdbd001941e75cf4326ba7c1bdad809912f10b1e44ffaebe073917cdd296" }, "src/L1/L1StandardBridge.sol": { - "initCodeHash": "0x291fba327c66777c7c17e11ac3195acf96d7127ebf2f13fe64170e6aa76bd5e9", - "sourceCodeHash": "0x4869295cb549008e319aea485104554b7957ced67eefb9dd0ddc108314663b7a" + "initCodeHash": "0x2db8c1208d5a779876ff9685dae8236fe5e7b6bbe6bcce2207ca7c7c24b54fba", + "sourceCodeHash": "0xadd45eccc0113d978ddf85b27d1ee800789812586fb3a3d22f52082debaf9325" }, "src/L1/L2OutputOracle.sol": { "initCodeHash": "0x14c3a582ca46ef2a6abad5590323f4de26ff4de54415c927c62e131ccbf8d9ba", "sourceCodeHash": "0xf5fcf570721e25459fadbb37e02f9efe349e1c8afcbf1e3b5fdb09c9f612cdc0" }, "src/L1/OptimismPortal.sol": { - "initCodeHash": "0x1e68f50033778575dd8a35332e7090b6597d12ad6a40efe7011c89e5a590fa8f", - "sourceCodeHash": "0xfb01516c1bd1087834795f494e5b99ac9c397b4198692663098b67979a208ee1" + "initCodeHash": "0xc79b174a2fee37270257775ca8837e22da38a60c20965bddd05b98b8f0a15a0c", + "sourceCodeHash": "0xfb55e1acb7deb2a4560c86151b684c46e68a78492d3ef4795be420655e7d43f1" }, "src/L1/OptimismPortal2.sol": { "initCodeHash": "0xea32d79e8297956d4f9a4c7985bb53ff8bb3735e5b307d4e118fea71f503a38e", @@ -48,8 +48,8 @@ "sourceCodeHash": "0xd6a894e371c2c7182b5960c507491f81c3775dda0efedd29475f7c30ca07b004" }, "src/L1/SystemConfig.sol": { - "initCodeHash": "0xeb5004fdb42512bdb43698f2c3c30f51dec8906c9823dc13e6b29fa875109d86", - "sourceCodeHash": "0x4dbcf7367d0f8afda54b9430a9f0fcac63fb9b57d87fa1b7ac2de28327e3ef0b" + "initCodeHash": "0x998884f4420c3bbfa79f809c0ae3a106e160dbdce45d9674b60c70d16c36087f", + "sourceCodeHash": "0xc73fde7dcaa18b391283f25910ba0188ed3d030966de5bd0773c694e93c78d32" }, "src/L2/BaseFeeVault.sol": { "initCodeHash": "0x2744d34573be83206d1b75d049d18a7bb37f9058e68c0803e5008c46b0dc2474", @@ -76,16 +76,16 @@ "sourceCodeHash": "0x3a94f273937d8908fb37dd2c495a6a0b9c3941fe68ccea51723f84eb343ba225" }, "src/L2/L2CrossDomainMessenger.sol": { - "initCodeHash": "0xbe8c8618552d14db92b0697d8e79c7ddb5a7563b9604723fbf059d15ed5d1067", - "sourceCodeHash": "0x84a5e7f511c3e714d3c1c8654be5394f9277ed84f8f2c3771eb1e7cb18c48ddc" + "initCodeHash": "0x5af579fbebc8ef1a0437064e97714670305697f164fc8bed2b7beddec18a53f3", + "sourceCodeHash": "0x2cef6c7d184ad1f1ec207827a259d09c241ad8f14f887f42c3d92c2f0d478f6e" }, "src/L2/L2ERC721Bridge.sol": { "initCodeHash": "0xcafa012b2d8f1bb05c11cbbff9749c0fe6f995c9afb1d26d2d71f03384e34a22", "sourceCodeHash": "0xa7646a588275046f92525ef121e5a0fe149e7752ea51fe62f7e0686a21153542" }, "src/L2/L2StandardBridge.sol": { - "initCodeHash": "0xfd7b94f29ddf98b8f5f84064ca1fb1a95f27f09166278e363627e22b11a856d8", - "sourceCodeHash": "0x160c3fff5b398cee8396c62b370ffcf2fab00859cd52f59001480602ed049a2c" + "initCodeHash": "0x0c3541144b66cced2be908417bcd18f4b2f0d68b31a8788a420e7f3eebede737", + "sourceCodeHash": "0x02581ef6db3531c87e683f3c46060a9189f1c905e458821dcf5d328c09f48012" }, "src/L2/L2ToL1MessagePasser.sol": { "initCodeHash": "0x08bbede75cd6dfd076903b8f04d24f82fa7881576c135825098778632e37eebc", diff --git a/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json b/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json index faf3ced2850..25c88588882 100644 --- a/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json +++ b/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json @@ -608,6 +608,11 @@ "name": "NoValue", "type": "error" }, + { + "inputs": [], + "name": "NonReentrant", + "type": "error" + }, { "inputs": [], "name": "OnlyCustomGasToken", diff --git a/packages/contracts-bedrock/snapshots/abi/SystemConfig.json b/packages/contracts-bedrock/snapshots/abi/SystemConfig.json index 8c587a0e119..59a21cd2d68 100644 --- a/packages/contracts-bedrock/snapshots/abi/SystemConfig.json +++ b/packages/contracts-bedrock/snapshots/abi/SystemConfig.json @@ -352,6 +352,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "isCustomGasToken", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "l1CrossDomainMessenger", diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json index 5b0fdf6bcb4..e8e88cf474d 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json @@ -3314,7 +3314,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200209f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616019806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615439565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b636600461556d565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156bf565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156d2565b611089565b34801561036257600080fd5b506101936103713660046156fa565b611144565b34801561038257600080fd5b50610193610391366004615740565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156d2565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b36600461577d565b611dde565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611df7565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615798565b611e51565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156d2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157e3565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120bb565b506106738282612267565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615860565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612534565b6107bd89826158a8565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615860565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a8565b909155506108a890508a8a8a8a8a8a6120bb565b50506108b48282612267565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158c0565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158fa565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190615937565b519050610ba4610b9f3686900386018661599c565b612610565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d8761266c565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190615937565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a615a02565b8a6040013561269c565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a86565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190615937565b602001516fffffffffffffffffffffffffffffffff166126c0565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a162013880612766565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615aa3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156bf565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f98261266c565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615860565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126c0565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190615937565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126c0565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127c2565b9150611d27565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cfe57856060015160386000828254611b5d9190615b08565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190615860565b9050611c28876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166128209092919063ffffffff16565b6060870151611c379082615b08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615860565b14611cfc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d2257611acd8660400151876080015160008960a001516127c2565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8990851515815260200190565b60405180910390a281158015611d9f5750326001145b15611dd6576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611deb826010615b1f565b61113e90615208615b4f565b600080611e026108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e49574791505090565b505060385490565b600054610100900460ff1615808015611e715750600054600160ff909116105b80611e8b5750303b158015611e8b575060005460ff166001145b611f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f7557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61203661287b565b801561209957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120dd575073ffffffffffffffffffffffffffffffffffffffff861615155b15612114576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211e8151611dde565b67ffffffffffffffff168367ffffffffffffffff16101561216b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121ca575033731111000000000000000000000000000000001111015b600086868686866040516020016121e5959493929190615aa3565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225591906156bf565b60405180910390a45050505050505050565b60015460009061229d907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b08565b905060006122a961298e565b90506000816020015160ff16826000015163ffffffff166122ca9190615baa565b9050821561240157600154600090612301908390700100000000000000000000000000000000900467ffffffffffffffff16615c12565b90506000836040015160ff16836123189190615c86565b6001546123389084906fffffffffffffffffffffffffffffffff16615c86565b6123429190615baa565b6001549091506000906123939061236c9084906fffffffffffffffffffffffffffffffff16615d42565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a4f565b905060018611156123c2576123bf61236c82876040015160ff1660018a6123ba9190615b08565b612a6e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612434908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124c1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124ed906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615db6565b905060006124ff48633b9aca00612ac3565b6125099083615df3565b905060005a6125189088615b08565b9050808211156108b4576108b461252f8284615b08565b612ada565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120999085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b03565b6000816000015182602001518360400151846060015160405160200161264f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a0880151935160009761264f979096959101615e07565b6000806126a886612c0f565b90506126b681868686612c41565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615860565b61275e90836158a8565b421192915050565b60018054829190601090612799908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127d2866000612c71565b905080612808576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526128769084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161258e565b505050565b600054610100900460ff16612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e72565b6000612a64612a5e8585612c8f565b83612c9f565b90505b9392505050565b6000670de0b6b3a7640000612aaf612a868583615baa565b612a9890670de0b6b3a7640000615c12565b612aaa85670de0b6b3a7640000615c86565b612cae565b612ab99086615c86565b612a649190615baa565b600081831015612ad35781612a67565b5090919050565b6000805a90505b825a612aed9083615b08565b101561287657612afc82615f15565b9150612ae1565b6000612b65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cdf9092919063ffffffff16565b8051909150156128765780806020019051810190612b839190615a86565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2b91815260200190565b6040516020818303038152906040529050919050565b6000612c6884612c52878686612cee565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ad35781612a67565b6000818312612ad35781612a67565b6000612a67670de0b6b3a764000083612cc68661376c565b612cd09190615c86565b612cda9190615baa565b6139b0565b6060612a648484600085613bef565b60606000845111612d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d6684613d85565b90506000612d7386613e71565b9050600084604051602001612d8a91815260200190565b60405160208183030381529060405290506000805b84518110156136e3576000858281518110612dbc57612dbc615f4d565b602002602001015190508451831115612e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f105780518051602091820120604051612ea592612e7f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b613067565b805151602011612fc65780518051602091820120604051612f3a92612e7f92910190815260200190565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b805184516020808701919091208251919092012014613067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b613073601060016158a8565b8160200151510361324f57845183036131e7576130ad81602001516010815181106130a0576130a0615f4d565b6020026020010151613ed4565b96506000875111613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b6001865161314e9190615b08565b82146131dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a67565b60008584815181106131fb576131fb615f4d565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061322657613226615f4d565b6020026020010151905061323981614034565b95506132466001866158a8565b945050506136d0565b60028160200151510361364857600061326782614059565b905060008160008151811061327e5761327e615f4d565b016020015160f81c90506000613295600283615f7c565b6132a0906002615f9e565b905060006132b1848360ff1661407d565b905060006132bf8a8961407d565b905060006132cd83836140b3565b90508083511461335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff851660021480613374575060ff85166003145b156135635780825114613409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61342387602001516001815181106130a0576130a0615f4d565b9c5060008d51116134b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134c49190615b08565b8814613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a67565b60ff85161580613576575060ff85166001145b156135b5576135a2876020015160018151811061359557613595615f4d565b6020026020010151614034565b99506135ae818a6158a8565b985061363d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136d0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136db81615f15565b915050612d9f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137e484614167565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139e157506000919050565b680755bf798b4a1bf1e58212613a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d289190615fc1565b60006040518083038185875af1925050503d8060008114613d65576040519150601f19603f3d011682016040523d82523d6000602084013e613d6a565b606091505b5091509150613d7a82828661423d565b979650505050505050565b80516060908067ffffffffffffffff811115613da357613da361532d565b604051908082528060200260200182016040528015613de857816020015b6040805180820190915260608082526020820152815260200190600190039081613dc15790505b50915060005b81811015613e6a576040518060400160405280858381518110613e1357613e13615f4d565b60200260200101518152602001613e42868481518110613e3557613e35615f4d565b6020026020010151614290565b815250838281518110613e5757613e57615f4d565b6020908102919091010152600101613dee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec9578060011b82018184015160001a8060041c8253600f811660018301535050600101613e9b565b509295945050505050565b60606000806000613ee4856142a3565b919450925090506000816001811115613eff57613eff615fdd565b14613f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f9682846158a8565b855114614025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6885602001518484614d10565b606060208260000151106140505761404b82613ed4565b61113e565b61113e82614da4565b606061113e61407883602001516000815181106130a0576130a0615f4d565b613e71565b60608251821061409c575060408051602081019091526000815261113e565b612a6783838486516140ae9190615b08565b614dba565b60008082518451106140c65782516140c9565b83515b90505b808210801561415057508282815181106140e8576140e8615f4d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061412757614127615f4d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614160578160010191506140cc565b5092915050565b60008082116141d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561424c575081612a67565b82511561425c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156bf565b606061113e61429e83614f92565b61507b565b600080600080846000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f8111614386576000600160009450945094505050614d09565b60b7811161459457600061439b608083615b08565b905080876000015111614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144cf57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d09915050565b60bf81116148e25760006145a960b783615b08565b905080876000015111614664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61481081846158a8565b8951116148c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148d08360016158a8565b9750955060009450614d099350505050565b60f781116149c35760006148f760c083615b08565b9050808760000151116149b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d09915050565b60006149d060f783615b08565b905080876000015111614a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c3781846158a8565b895111614cec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cf78360016158a8565b9750955060019450614d099350505050565b9193909250565b60608167ffffffffffffffff811115614d2b57614d2b61532d565b6040519080825280601f01601f191660200182016040528015614d55576020820181803683370190505b5090508115612a67576000614d6a84866158a8565b90506020820160005b84811015614d8b578281015182820152602001614d73565b84811115614d9a576000858301525b5050509392505050565b606061113e826020015160008460000151614d10565b60608182601f011015614e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f215760405191506000825260208201604052614f89565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f5a578051835260209283019201614f42565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161505d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b6060600080600061508b856142a3565b9194509250905060018160018111156150a6576150a6615fdd565b14615133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513f83856158a8565b146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151e35790505093506000835b86518110156152d1576000806152566040518060400160405280858c6000015161523a9190615b08565b8152602001858c6020015161524f91906158a8565b90526142a3565b50915091506040518060400160405280838361527291906158a8565b8152602001848b6020015161528791906158a8565b81525088858151811061529c5761529c615f4d565b60209081029190910101526152b26001856158a8565b93506152be81836158a8565b6152c890846158a8565b92505050615210565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152ff57600080fd5b50565b803567ffffffffffffffff8116811461531a57600080fd5b919050565b80151581146152ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153a3576153a361532d565b604052919050565b600082601f8301126153bc57600080fd5b813567ffffffffffffffff8111156153d6576153d661532d565b61540760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161535c565b81815284602083860101111561541c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561545257600080fd5b863561545d816152dd565b9550602087013594506040870135935061547960608801615302565b925060808701356154898161531f565b915060a087013567ffffffffffffffff8111156154a557600080fd5b6154b189828a016153ab565b9150509295509295509295565b600060c082840312156154d057600080fd5b60405160c0810167ffffffffffffffff82821081831117156154f4576154f461532d565b81604052829350843583526020850135915061550f826152dd565b81602084015260408501359150615525826152dd565b816040840152606085013560608401526080850135608084015260a085013591508082111561555357600080fd5b50615560858286016153ab565b60a0830152505092915050565b600080600080600085870360e081121561558657600080fd5b863567ffffffffffffffff8082111561559e57600080fd5b6155aa8a838b016154be565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155e357600080fd5b60408901955060c08901359250808311156155fd57600080fd5b828901925089601f84011261561157600080fd5b823591508082111561562257600080fd5b508860208260051b840101111561563857600080fd5b959894975092955050506020019190565b60005b8381101561566457818101518382015260200161564c565b838111156120995750506000910152565b6000815180845261568d816020860160208601615649565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a676020830184615675565b6000602082840312156156e457600080fd5b5035919050565b60ff811681146152ff57600080fd5b6000806000806080858703121561571057600080fd5b843561571b816152dd565b9350602085013561572b816156eb565b93969395505050506040820135916060013590565b60006020828403121561575257600080fd5b813567ffffffffffffffff81111561576957600080fd5b615775848285016154be565b949350505050565b60006020828403121561578f57600080fd5b612a6782615302565b6000806000606084860312156157ad57600080fd5b83356157b8816152dd565b925060208401356157c8816152dd565b915060408401356157d8816152dd565b809150509250925092565b600080600080600060a086880312156157fb57600080fd5b8535615806816152dd565b94506020860135935061581b60408701615302565b9250606086013561582b8161531f565b9150608086013567ffffffffffffffff81111561584757600080fd5b615853888289016153ab565b9150509295509295909350565b60006020828403121561587257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158bb576158bb615879565b500190565b600080604083850312156158d357600080fd5b82516158de816152dd565b60208401519092506158ef816156eb565b809150509250929050565b60006020828403121561590c57600080fd5b8151612a67816152dd565b80516fffffffffffffffffffffffffffffffff8116811461531a57600080fd5b60006060828403121561594957600080fd5b6040516060810181811067ffffffffffffffff8211171561596c5761596c61532d565b6040528251815261597f60208401615917565b602082015261599060408401615917565b60408201529392505050565b6000608082840312156159ae57600080fd5b6040516080810181811067ffffffffffffffff821117156159d1576159d161532d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1d57615a1d61532d565b8360051b6020615a2e81830161535c565b868152918501918181019036841115615a4657600080fd5b865b84811015615a7a57803586811115615a605760008081fd5b615a6c36828b016153ab565b845250918301918301615a48565b50979650505050505050565b600060208284031215615a9857600080fd5b8151612a678161531f565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615af7816049850160208701615649565b919091016049019695505050505050565b600082821015615b1a57615b1a615879565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b4657615b46615879565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b7257615b72615879565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb957615bb9615b7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0d57615c0d615879565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4c57615c4c615879565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c8057615c80615879565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cc757615cc7615879565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615d0257615d02615879565b60008712925087820587128484161615615d1e57615d1e615879565b87850587128184161615615d3457615d34615879565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7c57615d7c615879565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615db057615db0615879565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615dee57615dee615879565b500290565b600082615e0257615e02615b7b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e5260c0830184615675565b98975050505050505050565b805163ffffffff8116811461531a57600080fd5b600060c08284031215615e8457600080fd5b60405160c0810181811067ffffffffffffffff82111715615ea757615ea761532d565b604052615eb383615e5e565b81526020830151615ec3816156eb565b60208201526040830151615ed6816156eb565b6040820152615ee760608401615e5e565b6060820152615ef860808401615e5e565b6080820152615f0960a08401615917565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f4657615f46615879565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8f57615f8f615b7b565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb857615fb8615879565b90039392505050565b60008251615fd3818460208701615649565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3326,13 +3326,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b6200209f1760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b616019806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615439565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b636600461556d565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156bf565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156d2565b611089565b34801561036257600080fd5b506101936103713660046156fa565b611144565b34801561038257600080fd5b50610193610391366004615740565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156d2565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b36600461577d565b611dde565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611df7565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615798565b611e51565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156d2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157e3565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120bb565b506106738282612267565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615860565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612534565b6107bd89826158a8565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615860565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a8565b909155506108a890508a8a8a8a8a8a6120bb565b50506108b48282612267565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158c0565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158fa565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190615937565b519050610ba4610b9f3686900386018661599c565b612610565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d8761266c565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190615937565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a615a02565b8a6040013561269c565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a86565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190615937565b602001516fffffffffffffffffffffffffffffffff166126c0565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a162013880612766565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615aa3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156bf565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f98261266c565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615860565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126c0565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190615937565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126c0565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127c2565b9150611d27565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cfe57856060015160386000828254611b5d9190615b08565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190615860565b9050611c28876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166128209092919063ffffffff16565b6060870151611c379082615b08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615860565b14611cfc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d2257611acd8660400151876080015160008960a001516127c2565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8990851515815260200190565b60405180910390a281158015611d9f5750326001145b15611dd6576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611deb826010615b1f565b61113e90615208615b4f565b600080611e026108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e49574791505090565b505060385490565b600054610100900460ff1615808015611e715750600054600160ff909116105b80611e8b5750303b158015611e8b575060005460ff166001145b611f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f7557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61203661287b565b801561209957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120dd575073ffffffffffffffffffffffffffffffffffffffff861615155b15612114576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211e8151611dde565b67ffffffffffffffff168367ffffffffffffffff16101561216b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121ca575033731111000000000000000000000000000000001111015b600086868686866040516020016121e5959493929190615aa3565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225591906156bf565b60405180910390a45050505050505050565b60015460009061229d907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b08565b905060006122a961298e565b90506000816020015160ff16826000015163ffffffff166122ca9190615baa565b9050821561240157600154600090612301908390700100000000000000000000000000000000900467ffffffffffffffff16615c12565b90506000836040015160ff16836123189190615c86565b6001546123389084906fffffffffffffffffffffffffffffffff16615c86565b6123429190615baa565b6001549091506000906123939061236c9084906fffffffffffffffffffffffffffffffff16615d42565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a4f565b905060018611156123c2576123bf61236c82876040015160ff1660018a6123ba9190615b08565b612a6e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612434908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124c1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124ed906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615db6565b905060006124ff48633b9aca00612ac3565b6125099083615df3565b905060005a6125189088615b08565b9050808211156108b4576108b461252f8284615b08565b612ada565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120999085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b03565b6000816000015182602001518360400151846060015160405160200161264f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a0880151935160009761264f979096959101615e07565b6000806126a886612c0f565b90506126b681868686612c41565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615860565b61275e90836158a8565b421192915050565b60018054829190601090612799908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127d2866000612c71565b905080612808576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526128769084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161258e565b505050565b600054610100900460ff16612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e72565b6000612a64612a5e8585612c8f565b83612c9f565b90505b9392505050565b6000670de0b6b3a7640000612aaf612a868583615baa565b612a9890670de0b6b3a7640000615c12565b612aaa85670de0b6b3a7640000615c86565b612cae565b612ab99086615c86565b612a649190615baa565b600081831015612ad35781612a67565b5090919050565b6000805a90505b825a612aed9083615b08565b101561287657612afc82615f15565b9150612ae1565b6000612b65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cdf9092919063ffffffff16565b8051909150156128765780806020019051810190612b839190615a86565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2b91815260200190565b6040516020818303038152906040529050919050565b6000612c6884612c52878686612cee565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ad35781612a67565b6000818312612ad35781612a67565b6000612a67670de0b6b3a764000083612cc68661376c565b612cd09190615c86565b612cda9190615baa565b6139b0565b6060612a648484600085613bef565b60606000845111612d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d6684613d85565b90506000612d7386613e71565b9050600084604051602001612d8a91815260200190565b60405160208183030381529060405290506000805b84518110156136e3576000858281518110612dbc57612dbc615f4d565b602002602001015190508451831115612e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f105780518051602091820120604051612ea592612e7f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b613067565b805151602011612fc65780518051602091820120604051612f3a92612e7f92910190815260200190565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b805184516020808701919091208251919092012014613067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b613073601060016158a8565b8160200151510361324f57845183036131e7576130ad81602001516010815181106130a0576130a0615f4d565b6020026020010151613ed4565b96506000875111613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b6001865161314e9190615b08565b82146131dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a67565b60008584815181106131fb576131fb615f4d565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061322657613226615f4d565b6020026020010151905061323981614034565b95506132466001866158a8565b945050506136d0565b60028160200151510361364857600061326782614059565b905060008160008151811061327e5761327e615f4d565b016020015160f81c90506000613295600283615f7c565b6132a0906002615f9e565b905060006132b1848360ff1661407d565b905060006132bf8a8961407d565b905060006132cd83836140b3565b90508083511461335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff851660021480613374575060ff85166003145b156135635780825114613409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61342387602001516001815181106130a0576130a0615f4d565b9c5060008d51116134b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134c49190615b08565b8814613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a67565b60ff85161580613576575060ff85166001145b156135b5576135a2876020015160018151811061359557613595615f4d565b6020026020010151614034565b99506135ae818a6158a8565b985061363d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136d0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136db81615f15565b915050612d9f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137e484614167565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139e157506000919050565b680755bf798b4a1bf1e58212613a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d289190615fc1565b60006040518083038185875af1925050503d8060008114613d65576040519150601f19603f3d011682016040523d82523d6000602084013e613d6a565b606091505b5091509150613d7a82828661423d565b979650505050505050565b80516060908067ffffffffffffffff811115613da357613da361532d565b604051908082528060200260200182016040528015613de857816020015b6040805180820190915260608082526020820152815260200190600190039081613dc15790505b50915060005b81811015613e6a576040518060400160405280858381518110613e1357613e13615f4d565b60200260200101518152602001613e42868481518110613e3557613e35615f4d565b6020026020010151614290565b815250838281518110613e5757613e57615f4d565b6020908102919091010152600101613dee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec9578060011b82018184015160001a8060041c8253600f811660018301535050600101613e9b565b509295945050505050565b60606000806000613ee4856142a3565b919450925090506000816001811115613eff57613eff615fdd565b14613f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f9682846158a8565b855114614025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6885602001518484614d10565b606060208260000151106140505761404b82613ed4565b61113e565b61113e82614da4565b606061113e61407883602001516000815181106130a0576130a0615f4d565b613e71565b60608251821061409c575060408051602081019091526000815261113e565b612a6783838486516140ae9190615b08565b614dba565b60008082518451106140c65782516140c9565b83515b90505b808210801561415057508282815181106140e8576140e8615f4d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061412757614127615f4d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614160578160010191506140cc565b5092915050565b60008082116141d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561424c575081612a67565b82511561425c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156bf565b606061113e61429e83614f92565b61507b565b600080600080846000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f8111614386576000600160009450945094505050614d09565b60b7811161459457600061439b608083615b08565b905080876000015111614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144cf57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d09915050565b60bf81116148e25760006145a960b783615b08565b905080876000015111614664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61481081846158a8565b8951116148c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148d08360016158a8565b9750955060009450614d099350505050565b60f781116149c35760006148f760c083615b08565b9050808760000151116149b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d09915050565b60006149d060f783615b08565b905080876000015111614a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c3781846158a8565b895111614cec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cf78360016158a8565b9750955060019450614d099350505050565b9193909250565b60608167ffffffffffffffff811115614d2b57614d2b61532d565b6040519080825280601f01601f191660200182016040528015614d55576020820181803683370190505b5090508115612a67576000614d6a84866158a8565b90506020820160005b84811015614d8b578281015182820152602001614d73565b84811115614d9a576000858301525b5050509392505050565b606061113e826020015160008460000151614d10565b60608182601f011015614e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f215760405191506000825260208201604052614f89565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f5a578051835260209283019201614f42565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161505d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b6060600080600061508b856142a3565b9194509250905060018160018111156150a6576150a6615fdd565b14615133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513f83856158a8565b146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151e35790505093506000835b86518110156152d1576000806152566040518060400160405280858c6000015161523a9190615b08565b8152602001858c6020015161524f91906158a8565b90526142a3565b50915091506040518060400160405280838361527291906158a8565b8152602001848b6020015161528791906158a8565b81525088858151811061529c5761529c615f4d565b60209081029190910101526152b26001856158a8565b93506152be81836158a8565b6152c890846158a8565b92505050615210565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152ff57600080fd5b50565b803567ffffffffffffffff8116811461531a57600080fd5b919050565b80151581146152ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153a3576153a361532d565b604052919050565b600082601f8301126153bc57600080fd5b813567ffffffffffffffff8111156153d6576153d661532d565b61540760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161535c565b81815284602083860101111561541c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561545257600080fd5b863561545d816152dd565b9550602087013594506040870135935061547960608801615302565b925060808701356154898161531f565b915060a087013567ffffffffffffffff8111156154a557600080fd5b6154b189828a016153ab565b9150509295509295509295565b600060c082840312156154d057600080fd5b60405160c0810167ffffffffffffffff82821081831117156154f4576154f461532d565b81604052829350843583526020850135915061550f826152dd565b81602084015260408501359150615525826152dd565b816040840152606085013560608401526080850135608084015260a085013591508082111561555357600080fd5b50615560858286016153ab565b60a0830152505092915050565b600080600080600085870360e081121561558657600080fd5b863567ffffffffffffffff8082111561559e57600080fd5b6155aa8a838b016154be565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155e357600080fd5b60408901955060c08901359250808311156155fd57600080fd5b828901925089601f84011261561157600080fd5b823591508082111561562257600080fd5b508860208260051b840101111561563857600080fd5b959894975092955050506020019190565b60005b8381101561566457818101518382015260200161564c565b838111156120995750506000910152565b6000815180845261568d816020860160208601615649565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a676020830184615675565b6000602082840312156156e457600080fd5b5035919050565b60ff811681146152ff57600080fd5b6000806000806080858703121561571057600080fd5b843561571b816152dd565b9350602085013561572b816156eb565b93969395505050506040820135916060013590565b60006020828403121561575257600080fd5b813567ffffffffffffffff81111561576957600080fd5b615775848285016154be565b949350505050565b60006020828403121561578f57600080fd5b612a6782615302565b6000806000606084860312156157ad57600080fd5b83356157b8816152dd565b925060208401356157c8816152dd565b915060408401356157d8816152dd565b809150509250925092565b600080600080600060a086880312156157fb57600080fd5b8535615806816152dd565b94506020860135935061581b60408701615302565b9250606086013561582b8161531f565b9150608086013567ffffffffffffffff81111561584757600080fd5b615853888289016153ab565b9150509295509295909350565b60006020828403121561587257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158bb576158bb615879565b500190565b600080604083850312156158d357600080fd5b82516158de816152dd565b60208401519092506158ef816156eb565b809150509250929050565b60006020828403121561590c57600080fd5b8151612a67816152dd565b80516fffffffffffffffffffffffffffffffff8116811461531a57600080fd5b60006060828403121561594957600080fd5b6040516060810181811067ffffffffffffffff8211171561596c5761596c61532d565b6040528251815261597f60208401615917565b602082015261599060408401615917565b60408201529392505050565b6000608082840312156159ae57600080fd5b6040516080810181811067ffffffffffffffff821117156159d1576159d161532d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1d57615a1d61532d565b8360051b6020615a2e81830161535c565b868152918501918181019036841115615a4657600080fd5b865b84811015615a7a57803586811115615a605760008081fd5b615a6c36828b016153ab565b845250918301918301615a48565b50979650505050505050565b600060208284031215615a9857600080fd5b8151612a678161531f565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615af7816049850160208701615649565b919091016049019695505050505050565b600082821015615b1a57615b1a615879565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b4657615b46615879565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b7257615b72615879565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb957615bb9615b7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0d57615c0d615879565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4c57615c4c615879565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c8057615c80615879565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cc757615cc7615879565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615d0257615d02615879565b60008712925087820587128484161615615d1e57615d1e615879565b87850587128184161615615d3457615d34615879565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7c57615d7c615879565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615db057615db0615879565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615dee57615dee615879565b500290565b600082615e0257615e02615b7b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e5260c0830184615675565b98975050505050505050565b805163ffffffff8116811461531a57600080fd5b600060c08284031215615e8457600080fd5b60405160c0810181811067ffffffffffffffff82111715615ea757615ea761532d565b604052615eb383615e5e565b81526020830151615ec3816156eb565b60208201526040830151615ed6816156eb565b6040820152615ee760608401615e5e565b6060820152615ef860808401615e5e565b6080820152615f0960a08401615917565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f4657615f46615879565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8f57615f8f615b7b565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb857615fb8615879565b90039392505050565b60008251615fd3818460208701615649565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", - "deployedCode": "0x60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615439565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b636600461556d565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156bf565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156d2565b611089565b34801561036257600080fd5b506101936103713660046156fa565b611144565b34801561038257600080fd5b50610193610391366004615740565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156d2565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b36600461577d565b611dde565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611df7565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615798565b611e51565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156d2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157e3565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120bb565b506106738282612267565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615860565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612534565b6107bd89826158a8565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615860565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a8565b909155506108a890508a8a8a8a8a8a6120bb565b50506108b48282612267565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158c0565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158fa565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190615937565b519050610ba4610b9f3686900386018661599c565b612610565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d8761266c565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190615937565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a615a02565b8a6040013561269c565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a86565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190615937565b602001516fffffffffffffffffffffffffffffffff166126c0565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a162013880612766565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615aa3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156bf565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f98261266c565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615860565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126c0565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190615937565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126c0565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127c2565b9150611d27565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cfe57856060015160386000828254611b5d9190615b08565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190615860565b9050611c28876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166128209092919063ffffffff16565b6060870151611c379082615b08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615860565b14611cfc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d2257611acd8660400151876080015160008960a001516127c2565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8990851515815260200190565b60405180910390a281158015611d9f5750326001145b15611dd6576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611deb826010615b1f565b61113e90615208615b4f565b600080611e026108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e49574791505090565b505060385490565b600054610100900460ff1615808015611e715750600054600160ff909116105b80611e8b5750303b158015611e8b575060005460ff166001145b611f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f7557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61203661287b565b801561209957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120dd575073ffffffffffffffffffffffffffffffffffffffff861615155b15612114576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211e8151611dde565b67ffffffffffffffff168367ffffffffffffffff16101561216b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121ca575033731111000000000000000000000000000000001111015b600086868686866040516020016121e5959493929190615aa3565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225591906156bf565b60405180910390a45050505050505050565b60015460009061229d907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b08565b905060006122a961298e565b90506000816020015160ff16826000015163ffffffff166122ca9190615baa565b9050821561240157600154600090612301908390700100000000000000000000000000000000900467ffffffffffffffff16615c12565b90506000836040015160ff16836123189190615c86565b6001546123389084906fffffffffffffffffffffffffffffffff16615c86565b6123429190615baa565b6001549091506000906123939061236c9084906fffffffffffffffffffffffffffffffff16615d42565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a4f565b905060018611156123c2576123bf61236c82876040015160ff1660018a6123ba9190615b08565b612a6e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612434908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124c1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124ed906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615db6565b905060006124ff48633b9aca00612ac3565b6125099083615df3565b905060005a6125189088615b08565b9050808211156108b4576108b461252f8284615b08565b612ada565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120999085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b03565b6000816000015182602001518360400151846060015160405160200161264f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a0880151935160009761264f979096959101615e07565b6000806126a886612c0f565b90506126b681868686612c41565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615860565b61275e90836158a8565b421192915050565b60018054829190601090612799908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127d2866000612c71565b905080612808576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526128769084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161258e565b505050565b600054610100900460ff16612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e72565b6000612a64612a5e8585612c8f565b83612c9f565b90505b9392505050565b6000670de0b6b3a7640000612aaf612a868583615baa565b612a9890670de0b6b3a7640000615c12565b612aaa85670de0b6b3a7640000615c86565b612cae565b612ab99086615c86565b612a649190615baa565b600081831015612ad35781612a67565b5090919050565b6000805a90505b825a612aed9083615b08565b101561287657612afc82615f15565b9150612ae1565b6000612b65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cdf9092919063ffffffff16565b8051909150156128765780806020019051810190612b839190615a86565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2b91815260200190565b6040516020818303038152906040529050919050565b6000612c6884612c52878686612cee565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ad35781612a67565b6000818312612ad35781612a67565b6000612a67670de0b6b3a764000083612cc68661376c565b612cd09190615c86565b612cda9190615baa565b6139b0565b6060612a648484600085613bef565b60606000845111612d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d6684613d85565b90506000612d7386613e71565b9050600084604051602001612d8a91815260200190565b60405160208183030381529060405290506000805b84518110156136e3576000858281518110612dbc57612dbc615f4d565b602002602001015190508451831115612e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f105780518051602091820120604051612ea592612e7f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b613067565b805151602011612fc65780518051602091820120604051612f3a92612e7f92910190815260200190565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b805184516020808701919091208251919092012014613067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b613073601060016158a8565b8160200151510361324f57845183036131e7576130ad81602001516010815181106130a0576130a0615f4d565b6020026020010151613ed4565b96506000875111613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b6001865161314e9190615b08565b82146131dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a67565b60008584815181106131fb576131fb615f4d565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061322657613226615f4d565b6020026020010151905061323981614034565b95506132466001866158a8565b945050506136d0565b60028160200151510361364857600061326782614059565b905060008160008151811061327e5761327e615f4d565b016020015160f81c90506000613295600283615f7c565b6132a0906002615f9e565b905060006132b1848360ff1661407d565b905060006132bf8a8961407d565b905060006132cd83836140b3565b90508083511461335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff851660021480613374575060ff85166003145b156135635780825114613409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61342387602001516001815181106130a0576130a0615f4d565b9c5060008d51116134b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134c49190615b08565b8814613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a67565b60ff85161580613576575060ff85166001145b156135b5576135a2876020015160018151811061359557613595615f4d565b6020026020010151614034565b99506135ae818a6158a8565b985061363d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136d0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136db81615f15565b915050612d9f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137e484614167565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139e157506000919050565b680755bf798b4a1bf1e58212613a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d289190615fc1565b60006040518083038185875af1925050503d8060008114613d65576040519150601f19603f3d011682016040523d82523d6000602084013e613d6a565b606091505b5091509150613d7a82828661423d565b979650505050505050565b80516060908067ffffffffffffffff811115613da357613da361532d565b604051908082528060200260200182016040528015613de857816020015b6040805180820190915260608082526020820152815260200190600190039081613dc15790505b50915060005b81811015613e6a576040518060400160405280858381518110613e1357613e13615f4d565b60200260200101518152602001613e42868481518110613e3557613e35615f4d565b6020026020010151614290565b815250838281518110613e5757613e57615f4d565b6020908102919091010152600101613dee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec9578060011b82018184015160001a8060041c8253600f811660018301535050600101613e9b565b509295945050505050565b60606000806000613ee4856142a3565b919450925090506000816001811115613eff57613eff615fdd565b14613f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f9682846158a8565b855114614025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6885602001518484614d10565b606060208260000151106140505761404b82613ed4565b61113e565b61113e82614da4565b606061113e61407883602001516000815181106130a0576130a0615f4d565b613e71565b60608251821061409c575060408051602081019091526000815261113e565b612a6783838486516140ae9190615b08565b614dba565b60008082518451106140c65782516140c9565b83515b90505b808210801561415057508282815181106140e8576140e8615f4d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061412757614127615f4d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614160578160010191506140cc565b5092915050565b60008082116141d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561424c575081612a67565b82511561425c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156bf565b606061113e61429e83614f92565b61507b565b600080600080846000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f8111614386576000600160009450945094505050614d09565b60b7811161459457600061439b608083615b08565b905080876000015111614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144cf57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d09915050565b60bf81116148e25760006145a960b783615b08565b905080876000015111614664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61481081846158a8565b8951116148c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148d08360016158a8565b9750955060009450614d099350505050565b60f781116149c35760006148f760c083615b08565b9050808760000151116149b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d09915050565b60006149d060f783615b08565b905080876000015111614a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c3781846158a8565b895111614cec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cf78360016158a8565b9750955060019450614d099350505050565b9193909250565b60608167ffffffffffffffff811115614d2b57614d2b61532d565b6040519080825280601f01601f191660200182016040528015614d55576020820181803683370190505b5090508115612a67576000614d6a84866158a8565b90506020820160005b84811015614d8b578281015182820152602001614d73565b84811115614d9a576000858301525b5050509392505050565b606061113e826020015160008460000151614d10565b60608182601f011015614e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f215760405191506000825260208201604052614f89565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f5a578051835260209283019201614f42565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161505d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b6060600080600061508b856142a3565b9194509250905060018160018111156150a6576150a6615fdd565b14615133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513f83856158a8565b146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151e35790505093506000835b86518110156152d1576000806152566040518060400160405280858c6000015161523a9190615b08565b8152602001858c6020015161524f91906158a8565b90526142a3565b50915091506040518060400160405280838361527291906158a8565b8152602001848b6020015161528791906158a8565b81525088858151811061529c5761529c615f4d565b60209081029190910101526152b26001856158a8565b93506152be81836158a8565b6152c890846158a8565b92505050615210565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152ff57600080fd5b50565b803567ffffffffffffffff8116811461531a57600080fd5b919050565b80151581146152ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153a3576153a361532d565b604052919050565b600082601f8301126153bc57600080fd5b813567ffffffffffffffff8111156153d6576153d661532d565b61540760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161535c565b81815284602083860101111561541c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561545257600080fd5b863561545d816152dd565b9550602087013594506040870135935061547960608801615302565b925060808701356154898161531f565b915060a087013567ffffffffffffffff8111156154a557600080fd5b6154b189828a016153ab565b9150509295509295509295565b600060c082840312156154d057600080fd5b60405160c0810167ffffffffffffffff82821081831117156154f4576154f461532d565b81604052829350843583526020850135915061550f826152dd565b81602084015260408501359150615525826152dd565b816040840152606085013560608401526080850135608084015260a085013591508082111561555357600080fd5b50615560858286016153ab565b60a0830152505092915050565b600080600080600085870360e081121561558657600080fd5b863567ffffffffffffffff8082111561559e57600080fd5b6155aa8a838b016154be565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155e357600080fd5b60408901955060c08901359250808311156155fd57600080fd5b828901925089601f84011261561157600080fd5b823591508082111561562257600080fd5b508860208260051b840101111561563857600080fd5b959894975092955050506020019190565b60005b8381101561566457818101518382015260200161564c565b838111156120995750506000910152565b6000815180845261568d816020860160208601615649565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a676020830184615675565b6000602082840312156156e457600080fd5b5035919050565b60ff811681146152ff57600080fd5b6000806000806080858703121561571057600080fd5b843561571b816152dd565b9350602085013561572b816156eb565b93969395505050506040820135916060013590565b60006020828403121561575257600080fd5b813567ffffffffffffffff81111561576957600080fd5b615775848285016154be565b949350505050565b60006020828403121561578f57600080fd5b612a6782615302565b6000806000606084860312156157ad57600080fd5b83356157b8816152dd565b925060208401356157c8816152dd565b915060408401356157d8816152dd565b809150509250925092565b600080600080600060a086880312156157fb57600080fd5b8535615806816152dd565b94506020860135935061581b60408701615302565b9250606086013561582b8161531f565b9150608086013567ffffffffffffffff81111561584757600080fd5b615853888289016153ab565b9150509295509295909350565b60006020828403121561587257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158bb576158bb615879565b500190565b600080604083850312156158d357600080fd5b82516158de816152dd565b60208401519092506158ef816156eb565b809150509250929050565b60006020828403121561590c57600080fd5b8151612a67816152dd565b80516fffffffffffffffffffffffffffffffff8116811461531a57600080fd5b60006060828403121561594957600080fd5b6040516060810181811067ffffffffffffffff8211171561596c5761596c61532d565b6040528251815261597f60208401615917565b602082015261599060408401615917565b60408201529392505050565b6000608082840312156159ae57600080fd5b6040516080810181811067ffffffffffffffff821117156159d1576159d161532d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1d57615a1d61532d565b8360051b6020615a2e81830161535c565b868152918501918181019036841115615a4657600080fd5b865b84811015615a7a57803586811115615a605760008081fd5b615a6c36828b016153ab565b845250918301918301615a48565b50979650505050505050565b600060208284031215615a9857600080fd5b8151612a678161531f565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615af7816049850160208701615649565b919091016049019695505050505050565b600082821015615b1a57615b1a615879565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b4657615b46615879565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b7257615b72615879565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb957615bb9615b7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0d57615c0d615879565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4c57615c4c615879565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c8057615c80615879565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cc757615cc7615879565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615d0257615d02615879565b60008712925087820587128484161615615d1e57615d1e615879565b87850587128184161615615d3457615d34615879565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7c57615d7c615879565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615db057615db0615879565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615dee57615dee615879565b500290565b600082615e0257615e02615b7b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e5260c0830184615675565b98975050505050505050565b805163ffffffff8116811461531a57600080fd5b600060c08284031215615e8457600080fd5b60405160c0810181811067ffffffffffffffff82111715615ea757615ea761532d565b604052615eb383615e5e565b81526020830151615ec3816156eb565b60208201526040830151615ed6816156eb565b6040820152615ee760608401615e5e565b6060820152615ef860808401615e5e565b6080820152615f0960a08401615917565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f4657615f46615879565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8f57615f8f615b7b565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb857615fb8615879565b90039392505050565b60008251615fd3818460208701615649565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "deployedCode": "0x60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3340,7 +3340,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3348,7 +3348,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3356,7 +3356,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3364,7 +3364,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3372,7 +3372,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3380,7 +3380,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3388,7 +3388,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3396,7 +3396,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3404,7 +3404,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3412,7 +3412,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3420,7 +3420,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3428,7 +3428,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3436,7 +3436,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3444,7 +3444,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3452,7 +3452,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3460,7 +3460,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3468,7 +3468,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3476,7 +3476,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": true, "newValue": "0x000000000000000100000000000000000000000000000000000000003b9aca00", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3484,7 +3484,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3492,7 +3492,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3564,7 +3564,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3578,7 +3578,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3590,7 +3590,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3604,7 +3604,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3616,7 +3616,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3630,7 +3630,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3642,7 +3642,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3656,7 +3656,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -3707,7 +3707,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3719,13 +3719,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", + "deployedCode": "0x6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3733,7 +3733,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3741,7 +3741,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3749,7 +3749,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3757,7 +3757,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3765,7 +3765,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -3773,7 +3773,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": true, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -3781,7 +3781,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3789,7 +3789,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3797,7 +3797,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3805,7 +3805,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3813,7 +3813,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3821,7 +3821,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3829,7 +3829,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3837,7 +3837,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3845,7 +3845,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3853,7 +3853,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3861,7 +3861,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3869,7 +3869,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3877,7 +3877,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3885,7 +3885,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3914,7 +3914,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3928,7 +3928,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -3940,7 +3940,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3954,7 +3954,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -3966,7 +3966,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3980,7 +3980,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3992,7 +3992,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4006,7 +4006,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4018,7 +4018,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4032,7 +4032,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4617,7 +4617,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000496200003260016000805160206200382983398151915262001086565b60001b600019620000d160201b62000ed21760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b620012af565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000ed61760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000ed21760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001086565b60001b84620000d160201b62000ed21760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001086565b60001b8360000151620000d160201b62000ed21760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001086565b60001b8360200151620000d160201b62000ed21760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001086565b60001b8360400151620000d160201b62000ed21760201c565b6200038f6200037660017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762001086565b60001b8360600151620000d160201b62000ed21760201c565b620003c8620003af60016000805160206200380983398151915262001086565b60001b8360800151620000d160201b62000ed21760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001086565b60001b8360a00151620000d160201b62000ed21760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a15565b6200044162000d59565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d86565b565b6200056762000ded565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e49565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b6000600080516020620037c983398151915283604051620006229190620010cf565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f19818403018152919052905060016000600080516020620037c983398151915283604051620006859190620010cf565b60405180910390a3505050565b6200069c62000d59565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200382983398151915262001086565b60001b62000e9b60201b620006a41760201c565b6000036200055b576200055b6200078b60016000805160206200382983398151915262001086565b60001b43620000d160201b62000ed21760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000820573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000846919062001104565b60ff1614620008af5760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b60006200092f826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200091e919081019062001146565b62000e9f60201b62000ef21760201c565b9050600062000976836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b905062000992836012848462000f3760201b62000f951760201c565b6200099c62001024565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b158015620009f757600080fd5b505af115801562000a0c573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000aa45760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b155760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b379190620011fe565b63ffffffff16111562000b7c5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b6000816020015160ff161162000bed5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c0f90829062001229565b62000c1b91906200125b565b63ffffffff161462000c965760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d819063ffffffff6a01000000000000000000008204811691166200128a565b905090565b600054610100900460ff1662000de25760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e49565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b600060208251111562000f1b5760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f31826200104660201b620010671760201c565b92915050565b62000f9262000f6860017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec62001086565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000ed21760201c565b62000fd862000fc360017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001086565b60001b83620000d160201b62000ed21760201c565b6200101e6200100960017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001086565b60001b82620000d160201b62000ed21760201c565b50505050565b600062000d816200074f60016000805160206200380983398151915262001086565b8051602181106200105f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b634e487b7160e01b600052601160045260246000fd5b6000828210156200109b576200109b62001070565b500390565b60005b83811015620010bd578181015183820152602001620010a3565b838111156200101e5750506000910152565b6020815260008251806020840152620010f0816040850160208701620010a0565b601f01601f19169190910160400192915050565b6000602082840312156200111757600080fd5b815160ff811681146200112957600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200115957600080fd5b81516001600160401b03808211156200117157600080fd5b818401915084601f8301126200118657600080fd5b8151818111156200119b576200119b62001130565b604051601f8201601f19908116603f01168101908382118183101715620011c657620011c662001130565b81604052828152876020848701011115620011e057600080fd5b620011f3836020830160208801620010a0565b979650505050505050565b600063ffffffff80831681851680830382111562001220576200122062001070565b01949350505050565b600063ffffffff808416806200124f57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562001281576200128162001070565b02949350505050565b60006001600160401b0382811684821680830382111562001220576200122062001070565b6124ea80620012bf6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063a711986911610160578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461062e578063fd32aa0f14610636578063ffa1ad741461063e57600080fd5b8063f45e65d814610611578063f68016b71461061a57600080fd5b8063e81b2c6d116100bd578063e81b2c6d146105ed578063f2b4e617146105f6578063f2fde38b146105fe57600080fd5b8063e0e2016d146105dd578063e2a3285c146105e557600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b0214610499578063d8444715146105cd578063dac6e63a146105d557600080fd5b8063c71973f614610473578063c9b26f611461048657600080fd5b8063a711986914610448578063b40a817c14610450578063bc49ce5f14610463578063c4e8ddfa1461046b57600080fd5b80634add321d1161020e5780635d73369c116101c25780638da5cb5b116101a75780638da5cb5b1461040f578063935f029e1461042d5780639b7d7f0a1461044057600080fd5b80635d73369c146103ff578063715018a61461040757600080fd5b80634f16540b116101f35780634f16540b1461038757806354fd4d50146103ae578063550fcdc9146103f757600080fd5b80634add321d146103535780634c1e843d1461037457600080fd5b806318d13918116102655780631fd19ee11161024a5780631fd19ee11461030d5780634397dfef1461031557806348cd4cb11461034b57600080fd5b806318d13918146102f057806319f5cea81461030557600080fd5b806306c9265714610297578063078f29cf146102b25780630a49cb03146102df5780630c18c162146102e7575b600080fd5b61029f610646565b6040519081526020015b60405180910390f35b6102ba610674565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a9565b6102ba6106ad565b61029f60655481565b6103036102fe366004611f41565b6106dd565b005b61029f6106f1565b6102ba61071c565b61031d610746565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102a9565b61029f61075a565b61035b61078a565b60405167ffffffffffffffff90911681526020016102a9565b6103036103823660046120b4565b6107b0565b61029f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103ea6040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a99190612269565b6103ea610bbb565b61029f610bc5565b610303610bf0565b60335473ffffffffffffffffffffffffffffffffffffffff166102ba565b61030361043b36600461227c565b610c04565b6102ba610c1a565b6102ba610c4a565b61030361045e36600461229e565b610c7a565b61029f610c8b565b6102ba610cb6565b6103036104813660046122b9565b610ce6565b6103036104943660046122d5565b610cf7565b61055d6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102a99190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6103ea610d08565b6102ba610d12565b61029f610d42565b61029f610d6d565b61029f60675481565b6102ba610d98565b61030361060c366004611f41565b610dc8565b61029f60665481565b60685461035b9067ffffffffffffffff1681565b61029f610e7c565b61029f610ea7565b61029f600081565b61067160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b81565b60006106a86106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b5490565b905090565b60006106a86106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b6106e5611090565b6106ee81611111565b50565b61067160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60006106a87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107516111ce565b90939092509050565b60006106a86106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b6069546000906106a89063ffffffff6a0100000000000000000000820481169116612334565b600054610100900460ff16158080156107d05750600054600160ff909116105b806107ea5750303b1580156107ea575060005460ff166001145b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108e161124b565b6108ea8a610dc8565b6108f3876112ea565b6108fd8989611312565b610906866113a3565b61092f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b61096261095d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b849055565b61099661099060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b83519055565b6109cd6109c460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60208401519055565b610a046109fb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b60408401519055565b610a3b610a3260017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60608401519055565b610a72610a6960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b60808401519055565b610aa9610aa060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60a08401519055565b610ab1611481565b610abe8260c001516114e9565b610ac7846117e2565b610acf61078a565b67ffffffffffffffff168667ffffffffffffffff161015610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b8015610baf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106a8611c56565b61067160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610bf8611090565b610c026000611d17565b565b610c0c611090565b610c168282611312565b5050565b60006106a86106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60006106a86106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610c82611090565b6106ee816113a3565b61067160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b60006106a86106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b610cee611090565b6106ee816117e2565b610cff611090565b6106ee816112ea565b60606106a8611d8e565b60006106a86106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b61067160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b61067160017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60006106a86106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b610dd0611090565b73ffffffffffffffffffffffffffffffffffffffff8116610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610872565b6106ee81611d17565b61067160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b61067160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e203332206279746573000000000000000000006064820152608401610872565b610f8f82611067565b92915050565b610ffb610fc360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61102e61102960017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b839055565b61106161105c60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b829055565b50505050565b80516021811061107f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610872565b61113a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516111c29190612269565b60405180910390a35050565b600080806112006106a460017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261123f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b600054610100900460ff166112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c02611e44565b6067819055604080516020808201849052825180830390910181529082019091526000611191565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113969190612269565b60405180910390a3505050565b6113ab61078a565b67ffffffffffffffff168167ffffffffffffffff161015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611191565b6114af6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b600003610c0257610c026114e460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611538575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b156106ee57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190612360565b60ff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e0000000000000000000000000000000000006064820152608401610872565b60006116dc8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116d7919081019061237d565b610ef2565b9050600061172e8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b905061173d8360128484610f95565b6117456106ad565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610872565b6001816040015160ff1611611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610872565b6068546080820151825167ffffffffffffffff9092169161194a9190612448565b63ffffffff1611156119b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b6000816020015160ff1611611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610872565b8051602082015163ffffffff82169160ff90911690611a6f908290612467565b611a7991906124b1565b63ffffffff1614611b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610872565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611c626111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cdb57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b611ee4565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611d9a6111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e1357505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b600054610100900460ff16611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c0233611d17565b60405160005b82811a15611efa57600101611eea565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f3c57600080fd5b919050565b600060208284031215611f5357600080fd5b611f5c82611f18565b9392505050565b803567ffffffffffffffff81168114611f3c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611fcd57611fcd611f7b565b60405290565b803563ffffffff81168114611f3c57600080fd5b60ff811681146106ee57600080fd5b600060c0828403121561200857600080fd5b60405160c0810181811067ffffffffffffffff8211171561202b5761202b611f7b565b60405290508061203a83611fd3565b8152602083013561204a81611fe7565b6020820152604083013561205d81611fe7565b604082015261206e60608401611fd3565b606082015261207f60808401611fd3565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146120a757600080fd5b60a0919091015292915050565b6000806000806000806000806000898b036102808112156120d457600080fd5b6120dd8b611f18565b995060208b0135985060408b0135975060608b0135965061210060808c01611f63565b955061210e60a08c01611f18565b945061211d8c60c08d01611ff6565b935061212c6101808c01611f18565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe608201121561215e57600080fd5b50612167611faa565b6121746101a08c01611f18565b81526121836101c08c01611f18565b60208201526121956101e08c01611f18565b60408201526121a76102008c01611f18565b60608201526121b96102208c01611f18565b60808201526121cb6102408c01611f18565b60a08201526121dd6102608c01611f18565b60c0820152809150509295985092959850929598565b60005b8381101561220e5781810151838201526020016121f6565b838111156110615750506000910152565b600081518084526122378160208601602086016121f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f5c602083018461221f565b6000806040838503121561228f57600080fd5b50508035926020909101359150565b6000602082840312156122b057600080fd5b611f5c82611f63565b600060c082840312156122cb57600080fd5b611f5c8383611ff6565b6000602082840312156122e757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561232f5761232f6122ee565b500390565b600067ffffffffffffffff808316818516808303821115612357576123576122ee565b01949350505050565b60006020828403121561237257600080fd5b8151611f5c81611fe7565b60006020828403121561238f57600080fd5b815167ffffffffffffffff808211156123a757600080fd5b818401915084601f8301126123bb57600080fd5b8151818111156123cd576123cd611f7b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561241357612413611f7b565b8160405282815287602084870101111561242c57600080fd5b61243d8360208301602088016121f3565b979650505050505050565b600063ffffffff808316818516808303821115612357576123576122ee565b600063ffffffff808416806124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156124d4576124d46122ee565b0294935050505056fea164736f6c634300080f000a53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000496200003260016000805160206200398783398151915262001141565b60001b600019620000d160201b62000f441760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b6200136a565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000f481760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000f441760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001141565b60001b84620000d160201b62000f441760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001141565b60001b8360000151620000d160201b62000f441760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001141565b60001b8360200151620000d160201b62000f441760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001141565b60001b8360400151620000d160201b62000f441760201c565b6200038f6200037660017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762001141565b60001b8360600151620000d160201b62000f441760201c565b620003c8620003af60016000805160206200396783398151915262001141565b60001b8360800151620000d160201b62000f441760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001141565b60001b8360a00151620000d160201b62000f441760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a29565b6200044162000d6d565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d9a565b565b6200056762000e01565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e5d565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062003927833981519152836040516200062291906200118a565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062003927833981519152836040516200068591906200118a565b60405180910390a3505050565b6200069c62000d6d565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200398783398151915262001141565b60001b62000eaf60201b620006d71760201c565b6000036200055b576200055b6200078b60016000805160206200398783398151915262001141565b60001b43620000d160201b62000f441760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015620007ea5750620007e862000eb3565b155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085a9190620011bf565b60ff1614620008c35760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b600062000943826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000932919081019062001201565b62000ee760201b62000f641760201c565b905060006200098a836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b9050620009a6836012848462000f7f60201b620010071760201c565b620009b06200105b565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801562000a0b57600080fd5b505af115801562000a20573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000ab85760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b295760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b4b9190620012b9565b63ffffffff16111562000b905760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b6000816020015160ff161162000c015760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c23908290620012e4565b62000c2f919062001316565b63ffffffff161462000caa5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d959063ffffffff6a010000000000000000000082048116911662001345565b905090565b600054610100900460ff1662000df65760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e5d565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b60008062000ec06200107d565b506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b600060208251111562000f635760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f79826200109e60201b620010d91760201c565b92915050565b62000fc962000f9f6001600080516020620038e783398151915262001141565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000f441760201c565b6200100f62000ffa60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001141565b60001b83620000d160201b62000f441760201c565b620010556200104060017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001141565b60001b82620000d160201b62000f441760201c565b50505050565b600062000d956200074f60016000805160206200396783398151915262001141565b60008062001095620010c860201b620011021760201c565b90939092509050565b805160218110620010b75763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60008080620010ec6200074f6001600080516020620038e783398151915262001141565b6001600160a01b03811693509050826200111f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b634e487b7160e01b600052601160045260246000fd5b6000828210156200115657620011566200112b565b500390565b60005b83811015620011785781810151838201526020016200115e565b83811115620010555750506000910152565b6020815260008251806020840152620011ab8160408501602087016200115b565b601f01601f19169190910160400192915050565b600060208284031215620011d257600080fd5b815160ff81168114620011e457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200121457600080fd5b81516001600160401b03808211156200122c57600080fd5b818401915084601f8301126200124157600080fd5b815181811115620012565762001256620011eb565b604051601f8201601f19908116603f01168101908382118183101715620012815762001281620011eb565b816040528281528760208487010111156200129b57600080fd5b620012ae8360208301602088016200115b565b979650505050505050565b600063ffffffff808316818516808303821115620012db57620012db6200112b565b01949350505050565b600063ffffffff808416806200130a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156200133c576200133c6200112b565b02949350505050565b60006001600160401b03828116848216808303821115620012db57620012db6200112b565b61256d806200137a6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -4629,13 +4629,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000496200003260016000805160206200382983398151915262001086565b60001b600019620000d160201b62000ed21760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b620012af565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000ed61760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000ed21760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001086565b60001b84620000d160201b62000ed21760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001086565b60001b8360000151620000d160201b62000ed21760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001086565b60001b8360200151620000d160201b62000ed21760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001086565b60001b8360400151620000d160201b62000ed21760201c565b6200038f6200037660017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762001086565b60001b8360600151620000d160201b62000ed21760201c565b620003c8620003af60016000805160206200380983398151915262001086565b60001b8360800151620000d160201b62000ed21760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001086565b60001b8360a00151620000d160201b62000ed21760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a15565b6200044162000d59565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d86565b565b6200056762000ded565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e49565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b6000600080516020620037c983398151915283604051620006229190620010cf565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f19818403018152919052905060016000600080516020620037c983398151915283604051620006859190620010cf565b60405180910390a3505050565b6200069c62000d59565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200382983398151915262001086565b60001b62000e9b60201b620006a41760201c565b6000036200055b576200055b6200078b60016000805160206200382983398151915262001086565b60001b43620000d160201b62000ed21760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000820573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000846919062001104565b60ff1614620008af5760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b60006200092f826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200091e919081019062001146565b62000e9f60201b62000ef21760201c565b9050600062000976836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015620008f4573d6000803e3d6000fd5b905062000992836012848462000f3760201b62000f951760201c565b6200099c62001024565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b158015620009f757600080fd5b505af115801562000a0c573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000aa45760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b155760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b379190620011fe565b63ffffffff16111562000b7c5760405162461bcd60e51b815260206004820152601f6024820152600080516020620037a9833981519152604482015260640162000186565b6000816020015160ff161162000bed5760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c0f90829062001229565b62000c1b91906200125b565b63ffffffff161462000c965760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d819063ffffffff6a01000000000000000000008204811691166200128a565b905090565b600054610100900460ff1662000de25760405162461bcd60e51b815260206004820152602b6024820152600080516020620037e983398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e49565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b600060208251111562000f1b5760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f31826200104660201b620010671760201c565b92915050565b62000f9262000f6860017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec62001086565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000ed21760201c565b62000fd862000fc360017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001086565b60001b83620000d160201b62000ed21760201c565b6200101e6200100960017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001086565b60001b82620000d160201b62000ed21760201c565b50505050565b600062000d816200074f60016000805160206200380983398151915262001086565b8051602181106200105f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b634e487b7160e01b600052601160045260246000fd5b6000828210156200109b576200109b62001070565b500390565b60005b83811015620010bd578181015183820152602001620010a3565b838111156200101e5750506000910152565b6020815260008251806020840152620010f0816040850160208701620010a0565b601f01601f19169190910160400192915050565b6000602082840312156200111757600080fd5b815160ff811681146200112957600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200115957600080fd5b81516001600160401b03808211156200117157600080fd5b818401915084601f8301126200118657600080fd5b8151818111156200119b576200119b62001130565b604051601f8201601f19908116603f01168101908382118183101715620011c657620011c662001130565b81604052828152876020848701011115620011e057600080fd5b620011f3836020830160208801620010a0565b979650505050505050565b600063ffffffff80831681851680830382111562001220576200122062001070565b01949350505050565b600063ffffffff808416806200124f57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161562001281576200128162001070565b02949350505050565b60006001600160401b0382811684821680830382111562001220576200122062001070565b6124ea80620012bf6000396000f3fe608060405234801561001057600080fd5b50600436106102925760003560e01c8063a711986911610160578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461062e578063fd32aa0f14610636578063ffa1ad741461063e57600080fd5b8063f45e65d814610611578063f68016b71461061a57600080fd5b8063e81b2c6d116100bd578063e81b2c6d146105ed578063f2b4e617146105f6578063f2fde38b146105fe57600080fd5b8063e0e2016d146105dd578063e2a3285c146105e557600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b0214610499578063d8444715146105cd578063dac6e63a146105d557600080fd5b8063c71973f614610473578063c9b26f611461048657600080fd5b8063a711986914610448578063b40a817c14610450578063bc49ce5f14610463578063c4e8ddfa1461046b57600080fd5b80634add321d1161020e5780635d73369c116101c25780638da5cb5b116101a75780638da5cb5b1461040f578063935f029e1461042d5780639b7d7f0a1461044057600080fd5b80635d73369c146103ff578063715018a61461040757600080fd5b80634f16540b116101f35780634f16540b1461038757806354fd4d50146103ae578063550fcdc9146103f757600080fd5b80634add321d146103535780634c1e843d1461037457600080fd5b806318d13918116102655780631fd19ee11161024a5780631fd19ee11461030d5780634397dfef1461031557806348cd4cb11461034b57600080fd5b806318d13918146102f057806319f5cea81461030557600080fd5b806306c9265714610297578063078f29cf146102b25780630a49cb03146102df5780630c18c162146102e7575b600080fd5b61029f610646565b6040519081526020015b60405180910390f35b6102ba610674565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a9565b6102ba6106ad565b61029f60655481565b6103036102fe366004611f41565b6106dd565b005b61029f6106f1565b6102ba61071c565b61031d610746565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102a9565b61029f61075a565b61035b61078a565b60405167ffffffffffffffff90911681526020016102a9565b6103036103823660046120b4565b6107b0565b61029f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103ea6040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a99190612269565b6103ea610bbb565b61029f610bc5565b610303610bf0565b60335473ffffffffffffffffffffffffffffffffffffffff166102ba565b61030361043b36600461227c565b610c04565b6102ba610c1a565b6102ba610c4a565b61030361045e36600461229e565b610c7a565b61029f610c8b565b6102ba610cb6565b6103036104813660046122b9565b610ce6565b6103036104943660046122d5565b610cf7565b61055d6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102a99190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6103ea610d08565b6102ba610d12565b61029f610d42565b61029f610d6d565b61029f60675481565b6102ba610d98565b61030361060c366004611f41565b610dc8565b61029f60665481565b60685461035b9067ffffffffffffffff1681565b61029f610e7c565b61029f610ea7565b61029f600081565b61067160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b81565b60006106a86106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b5490565b905090565b60006106a86106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b6106e5611090565b6106ee81611111565b50565b61067160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60006106a87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107516111ce565b90939092509050565b60006106a86106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b6069546000906106a89063ffffffff6a0100000000000000000000820481169116612334565b600054610100900460ff16158080156107d05750600054600160ff909116105b806107ea5750303b1580156107ea575060005460ff166001145b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108e161124b565b6108ea8a610dc8565b6108f3876112ea565b6108fd8989611312565b610906866113a3565b61092f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b61096261095d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b849055565b61099661099060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b83519055565b6109cd6109c460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60208401519055565b610a046109fb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b60408401519055565b610a3b610a3260017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60608401519055565b610a72610a6960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b60808401519055565b610aa9610aa060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60a08401519055565b610ab1611481565b610abe8260c001516114e9565b610ac7846117e2565b610acf61078a565b67ffffffffffffffff168667ffffffffffffffff161015610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b8015610baf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106a8611c56565b61067160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610bf8611090565b610c026000611d17565b565b610c0c611090565b610c168282611312565b5050565b60006106a86106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60006106a86106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610c82611090565b6106ee816113a3565b61067160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b60006106a86106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b610cee611090565b6106ee816117e2565b610cff611090565b6106ee816112ea565b60606106a8611d8e565b60006106a86106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b61067160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b61067160017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60006106a86106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b610dd0611090565b73ffffffffffffffffffffffffffffffffffffffff8116610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610872565b6106ee81611d17565b61067160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b61067160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e203332206279746573000000000000000000006064820152608401610872565b610f8f82611067565b92915050565b610ffb610fc360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61102e61102960017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b839055565b61106161105c60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b829055565b50505050565b80516021811061107f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610872565b61113a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516111c29190612269565b60405180910390a35050565b600080806112006106a460017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261123f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b600054610100900460ff166112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c02611e44565b6067819055604080516020808201849052825180830390910181529082019091526000611191565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113969190612269565b60405180910390a3505050565b6113ab61078a565b67ffffffffffffffff168167ffffffffffffffff161015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611191565b6114af6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b600003610c0257610c026114e460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611538575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b156106ee57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190612360565b60ff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e0000000000000000000000000000000000006064820152608401610872565b60006116dc8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116d7919081019061237d565b610ef2565b9050600061172e8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b905061173d8360128484610f95565b6117456106ad565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610872565b6001816040015160ff1611611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610872565b6068546080820151825167ffffffffffffffff9092169161194a9190612448565b63ffffffff1611156119b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b6000816020015160ff1611611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610872565b8051602082015163ffffffff82169160ff90911690611a6f908290612467565b611a7991906124b1565b63ffffffff1614611b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610872565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611c626111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cdb57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b611ee4565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611d9a6111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e1357505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b600054610100900460ff16611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c0233611d17565b60405160005b82811a15611efa57600101611eea565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f3c57600080fd5b919050565b600060208284031215611f5357600080fd5b611f5c82611f18565b9392505050565b803567ffffffffffffffff81168114611f3c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611fcd57611fcd611f7b565b60405290565b803563ffffffff81168114611f3c57600080fd5b60ff811681146106ee57600080fd5b600060c0828403121561200857600080fd5b60405160c0810181811067ffffffffffffffff8211171561202b5761202b611f7b565b60405290508061203a83611fd3565b8152602083013561204a81611fe7565b6020820152604083013561205d81611fe7565b604082015261206e60608401611fd3565b606082015261207f60808401611fd3565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146120a757600080fd5b60a0919091015292915050565b6000806000806000806000806000898b036102808112156120d457600080fd5b6120dd8b611f18565b995060208b0135985060408b0135975060608b0135965061210060808c01611f63565b955061210e60a08c01611f18565b945061211d8c60c08d01611ff6565b935061212c6101808c01611f18565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe608201121561215e57600080fd5b50612167611faa565b6121746101a08c01611f18565b81526121836101c08c01611f18565b60208201526121956101e08c01611f18565b60408201526121a76102008c01611f18565b60608201526121b96102208c01611f18565b60808201526121cb6102408c01611f18565b60a08201526121dd6102608c01611f18565b60c0820152809150509295985092959850929598565b60005b8381101561220e5781810151838201526020016121f6565b838111156110615750506000910152565b600081518084526122378160208601602086016121f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f5c602083018461221f565b6000806040838503121561228f57600080fd5b50508035926020909101359150565b6000602082840312156122b057600080fd5b611f5c82611f63565b600060c082840312156122cb57600080fd5b611f5c8383611ff6565b6000602082840312156122e757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561232f5761232f6122ee565b500390565b600067ffffffffffffffff808316818516808303821115612357576123576122ee565b01949350505050565b60006020828403121561237257600080fd5b8151611f5c81611fe7565b60006020828403121561238f57600080fd5b815167ffffffffffffffff808211156123a757600080fd5b818401915084601f8301126123bb57600080fd5b8151818111156123cd576123cd611f7b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561241357612413611f7b565b8160405282815287602084870101111561242c57600080fd5b61243d8360208301602088016121f3565b979650505050505050565b600063ffffffff808316818516808303821115612357576123576122ee565b600063ffffffff808416806124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156124d4576124d46122ee565b0294935050505056fea164736f6c634300080f000a53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", - "deployedCode": "0x608060405234801561001057600080fd5b50600436106102925760003560e01c8063a711986911610160578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461062e578063fd32aa0f14610636578063ffa1ad741461063e57600080fd5b8063f45e65d814610611578063f68016b71461061a57600080fd5b8063e81b2c6d116100bd578063e81b2c6d146105ed578063f2b4e617146105f6578063f2fde38b146105fe57600080fd5b8063e0e2016d146105dd578063e2a3285c146105e557600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b0214610499578063d8444715146105cd578063dac6e63a146105d557600080fd5b8063c71973f614610473578063c9b26f611461048657600080fd5b8063a711986914610448578063b40a817c14610450578063bc49ce5f14610463578063c4e8ddfa1461046b57600080fd5b80634add321d1161020e5780635d73369c116101c25780638da5cb5b116101a75780638da5cb5b1461040f578063935f029e1461042d5780639b7d7f0a1461044057600080fd5b80635d73369c146103ff578063715018a61461040757600080fd5b80634f16540b116101f35780634f16540b1461038757806354fd4d50146103ae578063550fcdc9146103f757600080fd5b80634add321d146103535780634c1e843d1461037457600080fd5b806318d13918116102655780631fd19ee11161024a5780631fd19ee11461030d5780634397dfef1461031557806348cd4cb11461034b57600080fd5b806318d13918146102f057806319f5cea81461030557600080fd5b806306c9265714610297578063078f29cf146102b25780630a49cb03146102df5780630c18c162146102e7575b600080fd5b61029f610646565b6040519081526020015b60405180910390f35b6102ba610674565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a9565b6102ba6106ad565b61029f60655481565b6103036102fe366004611f41565b6106dd565b005b61029f6106f1565b6102ba61071c565b61031d610746565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102a9565b61029f61075a565b61035b61078a565b60405167ffffffffffffffff90911681526020016102a9565b6103036103823660046120b4565b6107b0565b61029f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103ea6040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a99190612269565b6103ea610bbb565b61029f610bc5565b610303610bf0565b60335473ffffffffffffffffffffffffffffffffffffffff166102ba565b61030361043b36600461227c565b610c04565b6102ba610c1a565b6102ba610c4a565b61030361045e36600461229e565b610c7a565b61029f610c8b565b6102ba610cb6565b6103036104813660046122b9565b610ce6565b6103036104943660046122d5565b610cf7565b61055d6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102a99190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6103ea610d08565b6102ba610d12565b61029f610d42565b61029f610d6d565b61029f60675481565b6102ba610d98565b61030361060c366004611f41565b610dc8565b61029f60665481565b60685461035b9067ffffffffffffffff1681565b61029f610e7c565b61029f610ea7565b61029f600081565b61067160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b81565b60006106a86106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b5490565b905090565b60006106a86106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b6106e5611090565b6106ee81611111565b50565b61067160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60006106a87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107516111ce565b90939092509050565b60006106a86106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b6069546000906106a89063ffffffff6a0100000000000000000000820481169116612334565b600054610100900460ff16158080156107d05750600054600160ff909116105b806107ea5750303b1580156107ea575060005460ff166001145b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108e161124b565b6108ea8a610dc8565b6108f3876112ea565b6108fd8989611312565b610906866113a3565b61092f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b61096261095d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b849055565b61099661099060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b83519055565b6109cd6109c460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60208401519055565b610a046109fb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b60408401519055565b610a3b610a3260017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60608401519055565b610a72610a6960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b60808401519055565b610aa9610aa060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60a08401519055565b610ab1611481565b610abe8260c001516114e9565b610ac7846117e2565b610acf61078a565b67ffffffffffffffff168667ffffffffffffffff161015610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b8015610baf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106a8611c56565b61067160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610bf8611090565b610c026000611d17565b565b610c0c611090565b610c168282611312565b5050565b60006106a86106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60006106a86106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610c82611090565b6106ee816113a3565b61067160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b60006106a86106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b610cee611090565b6106ee816117e2565b610cff611090565b6106ee816112ea565b60606106a8611d8e565b60006106a86106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b61067160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b61067160017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60006106a86106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b610dd0611090565b73ffffffffffffffffffffffffffffffffffffffff8116610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610872565b6106ee81611d17565b61067160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b61067160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e203332206279746573000000000000000000006064820152608401610872565b610f8f82611067565b92915050565b610ffb610fc360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61102e61102960017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b839055565b61106161105c60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b829055565b50505050565b80516021811061107f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610872565b61113a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516111c29190612269565b60405180910390a35050565b600080806112006106a460017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261123f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b600054610100900460ff166112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c02611e44565b6067819055604080516020808201849052825180830390910181529082019091526000611191565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113969190612269565b60405180910390a3505050565b6113ab61078a565b67ffffffffffffffff168167ffffffffffffffff161015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611191565b6114af6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b600003610c0257610c026114e460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611538575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b156106ee57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190612360565b60ff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e0000000000000000000000000000000000006064820152608401610872565b60006116dc8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116d7919081019061237d565b610ef2565b9050600061172e8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b905061173d8360128484610f95565b6117456106ad565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610872565b6001816040015160ff1611611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610872565b6068546080820151825167ffffffffffffffff9092169161194a9190612448565b63ffffffff1611156119b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b6000816020015160ff1611611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610872565b8051602082015163ffffffff82169160ff90911690611a6f908290612467565b611a7991906124b1565b63ffffffff1614611b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610872565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611c626111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cdb57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b611ee4565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611d9a6111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e1357505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b600054610100900460ff16611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c0233611d17565b60405160005b82811a15611efa57600101611eea565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f3c57600080fd5b919050565b600060208284031215611f5357600080fd5b611f5c82611f18565b9392505050565b803567ffffffffffffffff81168114611f3c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611fcd57611fcd611f7b565b60405290565b803563ffffffff81168114611f3c57600080fd5b60ff811681146106ee57600080fd5b600060c0828403121561200857600080fd5b60405160c0810181811067ffffffffffffffff8211171561202b5761202b611f7b565b60405290508061203a83611fd3565b8152602083013561204a81611fe7565b6020820152604083013561205d81611fe7565b604082015261206e60608401611fd3565b606082015261207f60808401611fd3565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146120a757600080fd5b60a0919091015292915050565b6000806000806000806000806000898b036102808112156120d457600080fd5b6120dd8b611f18565b995060208b0135985060408b0135975060608b0135965061210060808c01611f63565b955061210e60a08c01611f18565b945061211d8c60c08d01611ff6565b935061212c6101808c01611f18565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe608201121561215e57600080fd5b50612167611faa565b6121746101a08c01611f18565b81526121836101c08c01611f18565b60208201526121956101e08c01611f18565b60408201526121a76102008c01611f18565b60608201526121b96102208c01611f18565b60808201526121cb6102408c01611f18565b60a08201526121dd6102608c01611f18565b60c0820152809150509295985092959850929598565b60005b8381101561220e5781810151838201526020016121f6565b838111156110615750506000910152565b600081518084526122378160208601602086016121f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f5c602083018461221f565b6000806040838503121561228f57600080fd5b50508035926020909101359150565b6000602082840312156122b057600080fd5b611f5c82611f63565b600060c082840312156122cb57600080fd5b611f5c8383611ff6565b6000602082840312156122e757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561232f5761232f6122ee565b500390565b600067ffffffffffffffff808316818516808303821115612357576123576122ee565b01949350505050565b60006020828403121561237257600080fd5b8151611f5c81611fe7565b60006020828403121561238f57600080fd5b815167ffffffffffffffff808211156123a757600080fd5b818401915084601f8301126123bb57600080fd5b8151818111156123cd576123cd611f7b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561241357612413611f7b565b8160405282815287602084870101111561242c57600080fd5b61243d8360208301602088016121f3565b979650505050505050565b600063ffffffff808316818516808303821115612357576123576122ee565b600063ffffffff808416806124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156124d4576124d46122ee565b0294935050505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000496200003260016000805160206200398783398151915262001141565b60001b600019620000d160201b62000f441760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b6200136a565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000f481760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000f441760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001141565b60001b84620000d160201b62000f441760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001141565b60001b8360000151620000d160201b62000f441760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001141565b60001b8360200151620000d160201b62000f441760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001141565b60001b8360400151620000d160201b62000f441760201c565b6200038f6200037660017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762001141565b60001b8360600151620000d160201b62000f441760201c565b620003c8620003af60016000805160206200396783398151915262001141565b60001b8360800151620000d160201b62000f441760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001141565b60001b8360a00151620000d160201b62000f441760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a29565b6200044162000d6d565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d9a565b565b6200056762000e01565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e5d565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062003927833981519152836040516200062291906200118a565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062003927833981519152836040516200068591906200118a565b60405180910390a3505050565b6200069c62000d6d565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200398783398151915262001141565b60001b62000eaf60201b620006d71760201c565b6000036200055b576200055b6200078b60016000805160206200398783398151915262001141565b60001b43620000d160201b62000f441760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015620007ea5750620007e862000eb3565b155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085a9190620011bf565b60ff1614620008c35760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b600062000943826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000932919081019062001201565b62000ee760201b62000f641760201c565b905060006200098a836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b9050620009a6836012848462000f7f60201b620010071760201c565b620009b06200105b565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801562000a0b57600080fd5b505af115801562000a20573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000ab85760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b295760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b4b9190620012b9565b63ffffffff16111562000b905760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b6000816020015160ff161162000c015760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c23908290620012e4565b62000c2f919062001316565b63ffffffff161462000caa5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d959063ffffffff6a010000000000000000000082048116911662001345565b905090565b600054610100900460ff1662000df65760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e5d565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b60008062000ec06200107d565b506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b600060208251111562000f635760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f79826200109e60201b620010d91760201c565b92915050565b62000fc962000f9f6001600080516020620038e783398151915262001141565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000f441760201c565b6200100f62000ffa60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001141565b60001b83620000d160201b62000f441760201c565b620010556200104060017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001141565b60001b82620000d160201b62000f441760201c565b50505050565b600062000d956200074f60016000805160206200396783398151915262001141565b60008062001095620010c860201b620011021760201c565b90939092509050565b805160218110620010b75763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60008080620010ec6200074f6001600080516020620038e783398151915262001141565b6001600160a01b03811693509050826200111f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b634e487b7160e01b600052601160045260246000fd5b6000828210156200115657620011566200112b565b500390565b60005b83811015620011785781810151838201526020016200115e565b83811115620010555750506000910152565b6020815260008251806020840152620011ab8160408501602087016200115b565b601f01601f19169190910160400192915050565b600060208284031215620011d257600080fd5b815160ff81168114620011e457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200121457600080fd5b81516001600160401b03808211156200122c57600080fd5b818401915084601f8301126200124157600080fd5b815181811115620012565762001256620011eb565b604051601f8201601f19908116603f01168101908382118183101715620012815762001281620011eb565b816040528281528760208487010111156200129b57600080fd5b620012ae8360208301602088016200115b565b979650505050505050565b600063ffffffff808316818516808303821115620012db57620012db6200112b565b01949350505050565b600063ffffffff808416806200130a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156200133c576200133c6200112b565b02949350505050565b60006001600160401b03828116848216808303821115620012db57620012db6200112b565b61256d806200137a6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", + "deployedCode": "0x608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -4643,7 +4643,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4651,7 +4651,7 @@ "slot": "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4659,7 +4659,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4667,7 +4667,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4675,7 +4675,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4683,7 +4683,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -4691,7 +4691,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -4699,7 +4699,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4707,7 +4707,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4715,7 +4715,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4723,7 +4723,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4731,7 +4731,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", "previousValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", @@ -4739,7 +4739,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", "previousValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", @@ -4747,7 +4747,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", @@ -4755,7 +4755,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4763,7 +4763,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000067" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4771,7 +4771,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000065" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4779,7 +4779,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000066" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4787,7 +4787,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4795,7 +4795,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4803,7 +4803,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4811,7 +4811,7 @@ "slot": "0x65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4819,7 +4819,7 @@ "slot": "0x71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc597" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4827,7 +4827,7 @@ "slot": "0x383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4835,7 +4835,7 @@ "slot": "0x46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4843,7 +4843,7 @@ "slot": "0x9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4851,7 +4851,7 @@ "slot": "0x52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa906" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4859,7 +4859,7 @@ "slot": "0x4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4867,7 +4867,7 @@ "slot": "0xa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320c" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "previousValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", @@ -4875,7 +4875,7 @@ "slot": "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -4883,7 +4883,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4891,7 +4891,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000020100000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4899,7 +4899,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000020100000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000020100000001", @@ -4907,7 +4907,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4915,7 +4915,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4944,7 +4944,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4958,7 +4958,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000020100000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000020100000001", @@ -4970,7 +4970,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4984,7 +4984,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -4996,7 +4996,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5010,7 +5010,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5022,7 +5022,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5036,7 +5036,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5048,7 +5048,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5062,7 +5062,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5074,7 +5074,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5088,7 +5088,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5100,7 +5100,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5114,7 +5114,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5126,7 +5126,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5140,7 +5140,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "previousValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", @@ -5152,7 +5152,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5166,7 +5166,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5178,7 +5178,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5192,7 +5192,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5204,7 +5204,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5218,7 +5218,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5230,7 +5230,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5244,7 +5244,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5256,7 +5256,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5270,7 +5270,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5282,7 +5282,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5296,7 +5296,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5308,7 +5308,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5322,7 +5322,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5373,7 +5373,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -5385,13 +5385,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", - "deployedCode": "0x60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", + "deployedCode": "0x60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -5399,7 +5399,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5407,7 +5407,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5415,7 +5415,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5423,7 +5423,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5431,7 +5431,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5439,7 +5439,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5447,7 +5447,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5455,7 +5455,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5463,7 +5463,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5471,7 +5471,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5479,7 +5479,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5487,7 +5487,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5495,7 +5495,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5503,7 +5503,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5511,7 +5511,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5519,7 +5519,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5527,7 +5527,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5556,7 +5556,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5570,7 +5570,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5582,7 +5582,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5596,7 +5596,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5608,7 +5608,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5622,7 +5622,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5634,7 +5634,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5648,7 +5648,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5660,7 +5660,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5674,7 +5674,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -6269,7 +6269,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -6295,7 +6295,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -6361,7 +6361,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e40000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -6395,7 +6395,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef2860000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef286000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -6414,7 +6414,7 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -6424,7 +6424,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6738,8 +6738,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6748,7 +6748,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6781,8 +6781,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6791,7 +6791,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6859,8 +6859,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6869,7 +6869,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6937,8 +6937,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6947,7 +6947,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7015,8 +7015,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7025,7 +7025,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7093,8 +7093,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7103,7 +7103,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7171,8 +7171,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7181,7 +7181,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7249,8 +7249,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7259,7 +7259,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7327,8 +7327,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7337,7 +7337,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7405,8 +7405,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7415,7 +7415,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7457,8 +7457,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7467,7 +7467,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7509,8 +7509,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7519,7 +7519,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7561,8 +7561,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7571,7 +7571,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7613,8 +7613,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7623,7 +7623,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7665,8 +7665,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7675,7 +7675,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7717,8 +7717,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", - "previousValue": "0x0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2", + "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7727,7 +7727,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2", + "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7978,7 +7978,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c7deee506487d083a370f8937583d779e75cc15100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8004,7 +8004,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c7deee506487d083a370f8937583d779e75cc15100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -8070,7 +8070,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c7deee506487d083a370f8937583d779e75cc15100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8137,7 +8137,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8156,7 +8156,7 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -8234,8 +8234,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", - "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8244,7 +8244,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8466,8 +8466,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", - "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8476,7 +8476,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8561,8 +8561,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", - "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8571,7 +8571,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8665,8 +8665,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", - "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8675,7 +8675,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8769,8 +8769,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", - "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8779,7 +8779,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8873,8 +8873,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", - "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8883,7 +8883,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8977,8 +8977,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", - "previousValue": "0x000000000000000000000000c7deee506487d083a370f8937583d779e75cc151", + "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8987,7 +8987,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc7DEEE506487d083a370F8937583d779E75cc151", + "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9873,7 +9873,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x238181ae000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "data": "0x238181ae000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", "deployedCode": "0x", "initialized": true, "kind": "StaticCall", @@ -9887,7 +9887,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x65635d553a05006bf1bf601b4d4bb550ad3933e29e3a72b8f33e9893aa07ab4a" + "slot": "0xfb690be7489a401fecbc8149d22c2c5df2d372b3e71ff84c22d137fac267fad1" }, { "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", @@ -9895,7 +9895,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0x65635d553a05006bf1bf601b4d4bb550ad3933e29e3a72b8f33e9893aa07ab4a" + "slot": "0xfb690be7489a401fecbc8149d22c2c5df2d372b3e71ff84c22d137fac267fad1" } ], "value": 0 @@ -10083,7 +10083,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af70300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10109,7 +10109,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af70300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -10175,7 +10175,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af70300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10274,7 +10274,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b2ea4bd0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", + "data": "0x9b2ea4bd0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10301,7 +10301,7 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": true, - "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" @@ -10361,8 +10361,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", - "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10371,7 +10371,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10599,8 +10599,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", - "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10609,7 +10609,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10676,8 +10676,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", - "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10686,7 +10686,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10762,8 +10762,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", - "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10772,7 +10772,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10848,8 +10848,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", - "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10858,7 +10858,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10934,8 +10934,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", - "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10944,7 +10944,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11020,8 +11020,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", - "previousValue": "0x000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703", + "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -11030,7 +11030,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xFA89fcE7597a7254c0ea0857bAe8638D806Af703", + "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11095,7 +11095,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d58900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000027e6edeea56f2366beee8431164c54d199813df00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11121,7 +11121,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d58900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000027e6edeea56f2366beee8431164c54d199813df00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -11187,7 +11187,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d58900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000027e6edeea56f2366beee8431164c54d199813df00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11221,7 +11221,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef28600000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d58900000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef286000000000000000000000000027e6edeea56f2366beee8431164c54d199813df00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11240,7 +11240,7 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": true, - "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -11250,7 +11250,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11444,8 +11444,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", - "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11454,7 +11454,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11530,8 +11530,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", - "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11540,7 +11540,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11582,8 +11582,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", - "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11592,7 +11592,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11634,8 +11634,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", - "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11644,7 +11644,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11738,8 +11738,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", - "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11748,7 +11748,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11842,8 +11842,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", - "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11852,7 +11852,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11946,8 +11946,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", - "previousValue": "0x00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589", + "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11956,7 +11956,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x65fd054Ab5dae428925dfA1538570e9fF455d589", + "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", "chainInfo": { "chainId": 31337, "forkId": 0 diff --git a/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol index d9a071eddf9..ba86fdbed1a 100644 --- a/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol @@ -25,8 +25,8 @@ contract L1CrossDomainMessenger is CrossDomainMessenger, ISemver { SystemConfig public systemConfig; /// @notice Semantic version. - /// @custom:semver 2.4.0 - string public constant version = "2.4.0"; + /// @custom:semver 2.4.0-beta+custom-gas-token + string public constant version = "2.4.0-beta+custom-gas-token"; /// @notice Constructs the L1CrossDomainMessenger contract. constructor() CrossDomainMessenger() { diff --git a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol index 2b2ab1ccb98..1cc9575428a 100644 --- a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol +++ b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol @@ -72,8 +72,8 @@ contract L1StandardBridge is StandardBridge, ISemver { ); /// @notice Semantic version. - /// @custom:semver 2.2.0 - string public constant version = "2.2.0"; + /// @custom:semver 2.2.0-beta+custom-gas-token + string public constant version = "2.2.0-beta+custom-gas-token"; /// @notice Address of the SuperchainConfig contract. SuperchainConfig public superchainConfig; diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index a7a57fa61cb..b302dbcfa05 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -110,8 +110,8 @@ contract SystemConfig is OwnableUpgradeable, ISemver { event ConfigUpdate(uint256 indexed version, UpdateType indexed updateType, bytes data); /// @notice Semantic version. - /// @custom:semver 2.0.0 - string public constant version = "2.0.0"; + /// @custom:semver 2.1.0-beta+custom-gas-token + string public constant version = "2.1.0-beta+custom-gas-token"; /// @notice Constructs the SystemConfig contract. Cannot set /// the owner to `address(0)` due to the Ownable contract's @@ -257,10 +257,17 @@ contract SystemConfig is OwnableUpgradeable, ISemver { } /// @notice Getter for the gas paying asset address. - function gasPayingToken() external view returns (address addr_, uint8 decimals_) { + function gasPayingToken() public view returns (address addr_, uint8 decimals_) { (addr_, decimals_) = GasPayingToken.getToken(); } + /// @notice Getter for custom gas token paying networks. Returns true if the + /// network uses a custom gas token. + function isCustomGasToken() public view returns (bool) { + (address token,) = gasPayingToken(); + return token != Constants.ETHER; + } + /// @notice Getter for the gas paying token name. function gasPayingTokenName() external view returns (string memory name_) { name_ = GasPayingToken.getName(); @@ -272,9 +279,12 @@ contract SystemConfig is OwnableUpgradeable, ISemver { } /// @notice Internal setter for the gas paying token address, includes validation. + /// The token must not already be set and must be non zero and not the ether address + /// to set the token address. This prevents the token address from being changed + /// and makes it explicitly opt-in to use custom gas token. /// @param _token Address of the gas paying token. function _setGasPayingToken(address _token) internal { - if (_token != address(0) && _token != Constants.ETHER) { + if (_token != address(0) && _token != Constants.ETHER && !isCustomGasToken()) { require( ERC20(_token).decimals() == GAS_PAYING_TOKEN_DECIMALS, "SystemConfig: bad decimals of gas paying token" ); diff --git a/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol index e5e003de318..667fc60d741 100644 --- a/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol @@ -17,8 +17,8 @@ import { Predeploys } from "src/libraries/Predeploys.sol"; /// L2 on the L2 side. Users are generally encouraged to use this contract instead of lower /// level message passing contracts. contract L2CrossDomainMessenger is CrossDomainMessenger, ISemver { - /// @custom:semver 2.0.0 - string public constant version = "2.1.0"; + /// @custom:semver 2.1.0-beta+custom-gas-token + string public constant version = "2.1.0-beta+custom-gas-token"; /// @notice Constructs the L2CrossDomainMessenger contract. constructor() CrossDomainMessenger() { diff --git a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol index 923e580074b..f831b7ccfff 100644 --- a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol +++ b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol @@ -52,8 +52,8 @@ contract L2StandardBridge is StandardBridge, ISemver { bytes extraData ); - /// @custom:semver 1.9.0 - string public constant version = "1.9.0"; + /// @custom:semver 1.9.0-beta+custom-gas-token + string public constant version = "1.9.0-beta+custom-gas-token"; /// @notice Constructs the L2StandardBridge contract. constructor() StandardBridge() { diff --git a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol index b4a5a5c4b42..c488f0ad60c 100644 --- a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol @@ -622,7 +622,7 @@ contract L1CrossDomainMessenger_Test is Bridge_Initializer { } /// @dev Tests that gasPayingToken returns the correct values for ETH. - function test_gasPayingToken_ether_succeeds() external { + function test_gasPayingToken_ether_succeeds() external view { (address token, uint8 decimals) = l1CrossDomainMessenger.gasPayingToken(); assertEq(token, address(Constants.ETHER)); assertEq(decimals, 18); diff --git a/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol b/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol index 180587be0b6..b877c103804 100644 --- a/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol @@ -50,7 +50,7 @@ contract L1StandardBridge_Getter_Test is Bridge_Initializer { } /// @dev Tests that gasPayingToken returns the correct values for ETH. - function test_gasPayingToken_ether_succeeds() external { + function test_gasPayingToken_ether_succeeds() external view { (address token, uint8 decimals) = l1StandardBridge.gasPayingToken(); assertEq(token, Constants.ETHER); assertEq(decimals, 18); diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index 53df77b3dbf..dcca8cb13c5 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -449,7 +449,7 @@ contract OptimismPortal_Test is CommonTest { } /// @dev Tests that gasPayingToken returns the correct values for ETH. - function test_gasPayingToken_ether_succeeds() external { + function test_gasPayingToken_ether_succeeds() external view { (address token, uint8 decimals) = optimismPortal.gasPayingToken(); assertEq(token, Constants.ETHER); assertEq(decimals, 18); diff --git a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol index 4e537c823e6..c0ded4bd40d 100644 --- a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol @@ -220,7 +220,7 @@ contract SystemConfig_Init_CustomGasToken is SystemConfig_Init { /// @dev Helper to clean storage and then initialize the system config with an arbitrary gas token address. function cleanStorageAndInit(address _gasPayingToken) internal { - vm.store(address(systemConfig), bytes32(0), bytes32(0)); + vm.store(address(systemConfig), bytes32(0), bytes32(0)); // initailizer vm.store(address(systemConfig), GasPayingToken.GAS_PAYING_TOKEN_SLOT, bytes32(0)); vm.store(address(systemConfig), GasPayingToken.GAS_PAYING_TOKEN_NAME_SLOT, bytes32(0)); vm.store(address(systemConfig), GasPayingToken.GAS_PAYING_TOKEN_SYMBOL_SLOT, bytes32(0)); @@ -247,7 +247,7 @@ contract SystemConfig_Init_CustomGasToken is SystemConfig_Init { } /// @dev Tests that initialization sets the correct values and getters work. - function test_initialize_customGasToken_succeeds() external { + function test_initialize_customGasToken_succeeds() external view { (address addr, uint8 decimals) = systemConfig.gasPayingToken(); assertEq(addr, address(token)); assertEq(decimals, 18); diff --git a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol index 51d29e946c5..2a176385f34 100644 --- a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol @@ -230,7 +230,7 @@ contract L2CrossDomainMessenger_Test is Bridge_Initializer { } /// @dev Tests that gasPayingToken returns the correct values for ETH. - function test_gasPayingToken_ether_succeeds() external { + function test_gasPayingToken_ether_succeeds() external view { (address token, uint8 decimals) = l2CrossDomainMessenger.gasPayingToken(); assertEq(token, address(Constants.ETHER)); assertEq(decimals, 18); diff --git a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol index 20afd87f0ab..646dea7b4d2 100644 --- a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol @@ -213,7 +213,7 @@ contract L2StandardBridge_Test is Bridge_Initializer { } /// @dev Tests that gasPayingToken returns the correct values for ETH. - function test_gasPayingToken_ether_succeeds() external { + function test_gasPayingToken_ether_succeeds() external view { (address token, uint8 decimals) = l2StandardBridge.gasPayingToken(); assertEq(token, Constants.ETHER); assertEq(decimals, 18); diff --git a/packages/contracts-bedrock/test/L2/WETH.t.sol b/packages/contracts-bedrock/test/L2/WETH.t.sol index 79979b66c3e..fa16be1f53c 100644 --- a/packages/contracts-bedrock/test/L2/WETH.t.sol +++ b/packages/contracts-bedrock/test/L2/WETH.t.sol @@ -25,13 +25,13 @@ contract WETH_Test is CommonTest { } /// @dev Tests that the name function returns the correct value. - function test_name_ether_succeeds() external { + function test_name_ether_succeeds() external view { assertFalse(l1Block.isCustomGasToken()); assertEq("Wrapped Ether", weth.name()); } /// @dev Tests that the symbol function returns the correct value. - function test_symbol_ether_succeeds() external { + function test_symbol_ether_succeeds() external view { assertFalse(l1Block.isCustomGasToken()); assertEq("WETH", weth.symbol()); } diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index 4179cf6ae3d..c7dba54db4f 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -13,15 +13,15 @@ contract DeploymentSummary is DeploymentSummaryCode { Vm private constant vm = Vm(VM_ADDRESS); address internal constant addressManagerAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; - address internal constant l1CrossDomainMessengerAddress = 0xFA89fcE7597a7254c0ea0857bAe8638D806Af703; + address internal constant l1CrossDomainMessengerAddress = 0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a; address internal constant l1CrossDomainMessengerProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; address internal constant l1ERC721BridgeAddress = 0x44637A4292E0CD2B17A55d5F6B2F05AFcAcD0586; address internal constant l1ERC721BridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant l1StandardBridgeAddress = 0xc7DEEE506487d083a370F8937583d779E75cc151; + address internal constant l1StandardBridgeAddress = 0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E; address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; - address internal constant optimismPortalAddress = 0x65fd054Ab5dae428925dfA1538570e9fF455d589; + address internal constant optimismPortalAddress = 0x027e6eDEea56F2366beeE8431164c54D199813df; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; @@ -30,7 +30,7 @@ contract DeploymentSummary is DeploymentSummaryCode { address internal constant safeSingletonAddress = 0x90193C961A926261B756D1E5bb255e67ff9498A1; address internal constant superchainConfigAddress = 0x068E44eB31e111028c41598E4535be7468674D0A; address internal constant superchainConfigProxyAddress = 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809; - address internal constant systemConfigAddress = 0x6524e9dBE8a49d725399c1EC125e709dc2BC03E2; + address internal constant systemConfigAddress = 0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6; address internal constant systemConfigProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; address internal constant systemOwnerSafeAddress = 0x2601573C28B77dea6C8B73385c25024A28a00C3F; @@ -281,7 +281,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000003"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"0000000000000000000000006524e9dbe8a49d725399c1ec125e709dc2bc03e2"; + value = hex"000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -344,7 +344,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000005"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000c7deee506487d083a370f8937583d779e75cc151"; + value = hex"000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -407,7 +407,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000009"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e"; - value = hex"000000000000000000000000fa89fce7597a7254c0ea0857bae8638d806af703"; + value = hex"000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a"; vm.store(addressManagerAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000010000000000000000000000000000000000000000"; @@ -437,7 +437,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"000000000000000000000000000000000000000000000000000000000000000a"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"00000000000000000000000065fd054ab5dae428925dfa1538570e9ff455d589"; + value = hex"000000000000000000000000027e6edeea56f2366beee8431164c54d199813df"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index 0ca2ef2bf12..18351e2bba3 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -35,15 +35,15 @@ contract DeploymentSummaryCode { bytes internal constant l1ERC721BridgeProxyCode = hex"60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a"; bytes internal constant optimismPortalCode = - hex"60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b5366004615439565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b636600461556d565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f322e362e3000000000000000000000000000000000000000000000000000000081525081565b60405161020891906156bf565b34801561031d57600080fd5b50610326610ff6565b6040519015158152602001610208565b34801561034257600080fd5b506103266103513660046156d2565b611089565b34801561036257600080fd5b506101936103713660046156fa565b611144565b34801561038257600080fd5b50610193610391366004615740565b611306565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b3660046156d2565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b36600461577d565b611dde565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611df7565b604051908152602001610208565b34801561048857600080fd5b50610193610497366004615798565b611e51565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b6105583660046156d2565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d73660046157e3565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6106688834898989896120bb565b506106738282612267565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f9190615860565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612534565b6107bd89826158a8565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b9190615860565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906158a8565b909155506108a890508a8a8a8a8a8a6120bb565b50506108b48282612267565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095291906158c0565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906158fa565b905090565b6109fb610ff6565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610af6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084015b60405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8a9190615937565b519050610ba4610b9f3686900386018661599c565b612610565b8114610c32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610aed565b6000610c3d8761266c565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610d535750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610d2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f9190615937565b5114155b610ddf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610aed565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610ea89101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e9e888a615a02565b8a6040013561269c565b610f34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610aed565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611065573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615a86565b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161113e9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190615937565b602001516fffffffffffffffffffffffffffffffff166126c0565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611195576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111a162013880612766565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f0000000000000000000000000000000000000000000000000000000017905290516112be96959493929101615aa3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112f6916156bf565b60405180910390a450505050565b565b61130e610ff6565b15611345576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146113ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610aed565b60006113f98261266c565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff808216948301859052700100000000000000000000000000000000909104169181019190915292935090036114e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610aed565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115759190615860565b81602001516fffffffffffffffffffffffffffffffff161015611640576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610aed565b61165f81602001516fffffffffffffffffffffffffffffffff166126c0565b611711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc9190615937565b8251815191925014611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610aed565b61189581602001516fffffffffffffffffffffffffffffffff166126c0565b611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610aed565b60008381526033602052604090205460ff16156119e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610aed565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000090921691909117905580611a716108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611ad457611acd8660400151876080015188606001518960a001516127c2565b9150611d27565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611b3d576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611cfe57856060015160386000828254611b5d9190615b08565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190615860565b9050611c28876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166128209092919063ffffffff16565b6060870151611c379082615b08565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc59190615860565b14611cfc576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611d2257611acd8660400151876080015160008960a001516127c2565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611d8990851515815260200190565b60405180910390a281158015611d9f5750326001145b15611dd6576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611deb826010615b1f565b61113e90615208615b4f565b600080611e026108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e49574791505090565b505060385490565b600054610100900460ff1615808015611e715750600054600160ff909116105b80611e8b5750303b158015611e8b575060005460ff166001145b611f17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610aed565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611f7557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff16610100858416021790556032541661202e57603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b61203661287b565b801561209957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b8180156120dd575073ffffffffffffffffffffffffffffffffffffffff861615155b15612114576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61211e8151611dde565b67ffffffffffffffff168367ffffffffffffffff16101561216b576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156121a9576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146121ca575033731111000000000000000000000000000000001111015b600086868686866040516020016121e5959493929190615aa3565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161225591906156bf565b60405180910390a45050505050505050565b60015460009061229d907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615b08565b905060006122a961298e565b90506000816020015160ff16826000015163ffffffff166122ca9190615baa565b9050821561240157600154600090612301908390700100000000000000000000000000000000900467ffffffffffffffff16615c12565b90506000836040015160ff16836123189190615c86565b6001546123389084906fffffffffffffffffffffffffffffffff16615c86565b6123429190615baa565b6001549091506000906123939061236c9084906fffffffffffffffffffffffffffffffff16615d42565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612a4f565b905060018611156123c2576123bf61236c82876040015160ff1660018a6123ba9190615b08565b612a6e565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612434908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156124c1576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906124ed906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615db6565b905060006124ff48633b9aca00612ac3565b6125099083615df3565b905060005a6125189088615b08565b9050808211156108b4576108b461252f8284615b08565b612ada565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526120999085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612b03565b6000816000015182602001518360400151846060015160405160200161264f949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a0880151935160009761264f979096959101615e07565b6000806126a886612c0f565b90506126b681868686612c41565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612730573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127549190615860565b61275e90836158a8565b421192915050565b60018054829190601090612799908490700100000000000000000000000000000000900467ffffffffffffffff16615b4f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006127d2866000612c71565b905080612808576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526128769084907fa9059cbb000000000000000000000000000000000000000000000000000000009060640161258e565b505050565b600054610100900460ff16612912576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610aed565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036113045760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612a2b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615e72565b6000612a64612a5e8585612c8f565b83612c9f565b90505b9392505050565b6000670de0b6b3a7640000612aaf612a868583615baa565b612a9890670de0b6b3a7640000615c12565b612aaa85670de0b6b3a7640000615c86565b612cae565b612ab99086615c86565b612a649190615baa565b600081831015612ad35781612a67565b5090919050565b6000805a90505b825a612aed9083615b08565b101561287657612afc82615f15565b9150612ae1565b6000612b65826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612cdf9092919063ffffffff16565b8051909150156128765780806020019051810190612b839190615a86565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610aed565b60608180519060200120604051602001612c2b91815260200190565b6040516020818303038152906040529050919050565b6000612c6884612c52878686612cee565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612ad35781612a67565b6000818312612ad35781612a67565b6000612a67670de0b6b3a764000083612cc68661376c565b612cd09190615c86565b612cda9190615baa565b6139b0565b6060612a648484600085613bef565b60606000845111612d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610aed565b6000612d6684613d85565b90506000612d7386613e71565b9050600084604051602001612d8a91815260200190565b60405160208183030381529060405290506000805b84518110156136e3576000858281518110612dbc57612dbc615f4d565b602002602001015190508451831115612e57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610aed565b82600003612f105780518051602091820120604051612ea592612e7f92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610aed565b613067565b805151602011612fc65780518051602091820120604051612f3a92612e7f92910190815260200190565b612f0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610aed565b805184516020808701919091208251919092012014613067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610aed565b613073601060016158a8565b8160200151510361324f57845183036131e7576130ad81602001516010815181106130a0576130a0615f4d565b6020026020010151613ed4565b96506000875111613140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610aed565b6001865161314e9190615b08565b82146131dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610aed565b505050505050612a67565b60008584815181106131fb576131fb615f4d565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061322657613226615f4d565b6020026020010151905061323981614034565b95506132466001866158a8565b945050506136d0565b60028160200151510361364857600061326782614059565b905060008160008151811061327e5761327e615f4d565b016020015160f81c90506000613295600283615f7c565b6132a0906002615f9e565b905060006132b1848360ff1661407d565b905060006132bf8a8961407d565b905060006132cd83836140b3565b90508083511461335f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610aed565b60ff851660021480613374575060ff85166003145b156135635780825114613409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610aed565b61342387602001516001815181106130a0576130a0615f4d565b9c5060008d51116134b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610aed565b60018c516134c49190615b08565b8814613552576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610aed565b505050505050505050505050612a67565b60ff85161580613576575060ff85166001145b156135b5576135a2876020015160018151811061359557613595615f4d565b6020026020010151614034565b99506135ae818a6158a8565b985061363d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610aed565b5050505050506136d0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610aed565b50806136db81615f15565b915050612d9f565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610aed565b60008082136137d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b600060606137e484614167565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136139e157506000919050565b680755bf798b4a1bf1e58212613a53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610aed565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613c81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610aed565b73ffffffffffffffffffffffffffffffffffffffff85163b613cff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610aed565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613d289190615fc1565b60006040518083038185875af1925050503d8060008114613d65576040519150601f19603f3d011682016040523d82523d6000602084013e613d6a565b606091505b5091509150613d7a82828661423d565b979650505050505050565b80516060908067ffffffffffffffff811115613da357613da361532d565b604051908082528060200260200182016040528015613de857816020015b6040805180820190915260608082526020820152815260200190600190039081613dc15790505b50915060005b81811015613e6a576040518060400160405280858381518110613e1357613e13615f4d565b60200260200101518152602001613e42868481518110613e3557613e35615f4d565b6020026020010151614290565b815250838281518110613e5757613e57615f4d565b6020908102919091010152600101613dee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613ec9578060011b82018184015160001a8060041c8253600f811660018301535050600101613e9b565b509295945050505050565b60606000806000613ee4856142a3565b919450925090506000816001811115613eff57613eff615fdd565b14613f8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610aed565b613f9682846158a8565b855114614025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610aed565b612c6885602001518484614d10565b606060208260000151106140505761404b82613ed4565b61113e565b61113e82614da4565b606061113e61407883602001516000815181106130a0576130a0615f4d565b613e71565b60608251821061409c575060408051602081019091526000815261113e565b612a6783838486516140ae9190615b08565b614dba565b60008082518451106140c65782516140c9565b83515b90505b808210801561415057508282815181106140e8576140e8615f4d565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061412757614127615f4d565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15614160578160010191506140cc565b5092915050565b60008082116141d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610aed565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561424c575081612a67565b82511561425c5782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed91906156bf565b606061113e61429e83614f92565b61507b565b600080600080846000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b6020840151805160001a607f8111614386576000600160009450945094505050614d09565b60b7811161459457600061439b608083615b08565b905080876000015111614456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610aed565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806144cf57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614581576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610aed565b5060019550935060009250614d09915050565b60bf81116148e25760006145a960b783615b08565b905080876000015111614664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610aed565b61481081846158a8565b8951116148c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610aed565b6148d08360016158a8565b9750955060009450614d099350505050565b60f781116149c35760006148f760c083615b08565b9050808760000151116149b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b600195509350849250614d09915050565b60006149d060f783615b08565b905080876000015111614a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610aed565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610aed565b600184015160088302610100031c60378111614c2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610aed565b614c3781846158a8565b895111614cec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610aed565b614cf78360016158a8565b9750955060019450614d099350505050565b9193909250565b60608167ffffffffffffffff811115614d2b57614d2b61532d565b6040519080825280601f01601f191660200182016040528015614d55576020820181803683370190505b5090508115612a67576000614d6a84866158a8565b90506020820160005b84811015614d8b578281015182820152602001614d73565b84811115614d9a576000858301525b5050509392505050565b606061113e826020015160008460000151614d10565b60608182601f011015614e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b828284011015614e95576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610aed565b81830184511015614f02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610aed565b606082158015614f215760405191506000825260208201604052614f89565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614f5a578051835260209283019201614f42565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161505d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610aed565b50604080518082019091528151815260209182019181019190915290565b6060600080600061508b856142a3565b9194509250905060018160018111156150a6576150a6615fdd565b14615133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610aed565b845161513f83856158a8565b146151cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610aed565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151e35790505093506000835b86518110156152d1576000806152566040518060400160405280858c6000015161523a9190615b08565b8152602001858c6020015161524f91906158a8565b90526142a3565b50915091506040518060400160405280838361527291906158a8565b8152602001848b6020015161528791906158a8565b81525088858151811061529c5761529c615f4d565b60209081029190910101526152b26001856158a8565b93506152be81836158a8565b6152c890846158a8565b92505050615210565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146152ff57600080fd5b50565b803567ffffffffffffffff8116811461531a57600080fd5b919050565b80151581146152ff57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156153a3576153a361532d565b604052919050565b600082601f8301126153bc57600080fd5b813567ffffffffffffffff8111156153d6576153d661532d565b61540760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161535c565b81815284602083860101111561541c57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561545257600080fd5b863561545d816152dd565b9550602087013594506040870135935061547960608801615302565b925060808701356154898161531f565b915060a087013567ffffffffffffffff8111156154a557600080fd5b6154b189828a016153ab565b9150509295509295509295565b600060c082840312156154d057600080fd5b60405160c0810167ffffffffffffffff82821081831117156154f4576154f461532d565b81604052829350843583526020850135915061550f826152dd565b81602084015260408501359150615525826152dd565b816040840152606085013560608401526080850135608084015260a085013591508082111561555357600080fd5b50615560858286016153ab565b60a0830152505092915050565b600080600080600085870360e081121561558657600080fd5b863567ffffffffffffffff8082111561559e57600080fd5b6155aa8a838b016154be565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156155e357600080fd5b60408901955060c08901359250808311156155fd57600080fd5b828901925089601f84011261561157600080fd5b823591508082111561562257600080fd5b508860208260051b840101111561563857600080fd5b959894975092955050506020019190565b60005b8381101561566457818101518382015260200161564c565b838111156120995750506000910152565b6000815180845261568d816020860160208601615649565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a676020830184615675565b6000602082840312156156e457600080fd5b5035919050565b60ff811681146152ff57600080fd5b6000806000806080858703121561571057600080fd5b843561571b816152dd565b9350602085013561572b816156eb565b93969395505050506040820135916060013590565b60006020828403121561575257600080fd5b813567ffffffffffffffff81111561576957600080fd5b615775848285016154be565b949350505050565b60006020828403121561578f57600080fd5b612a6782615302565b6000806000606084860312156157ad57600080fd5b83356157b8816152dd565b925060208401356157c8816152dd565b915060408401356157d8816152dd565b809150509250925092565b600080600080600060a086880312156157fb57600080fd5b8535615806816152dd565b94506020860135935061581b60408701615302565b9250606086013561582b8161531f565b9150608086013567ffffffffffffffff81111561584757600080fd5b615853888289016153ab565b9150509295509295909350565b60006020828403121561587257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156158bb576158bb615879565b500190565b600080604083850312156158d357600080fd5b82516158de816152dd565b60208401519092506158ef816156eb565b809150509250929050565b60006020828403121561590c57600080fd5b8151612a67816152dd565b80516fffffffffffffffffffffffffffffffff8116811461531a57600080fd5b60006060828403121561594957600080fd5b6040516060810181811067ffffffffffffffff8211171561596c5761596c61532d565b6040528251815261597f60208401615917565b602082015261599060408401615917565b60408201529392505050565b6000608082840312156159ae57600080fd5b6040516080810181811067ffffffffffffffff821117156159d1576159d161532d565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115615a1d57615a1d61532d565b8360051b6020615a2e81830161535c565b868152918501918181019036841115615a4657600080fd5b865b84811015615a7a57803586811115615a605760008081fd5b615a6c36828b016153ab565b845250918301918301615a48565b50979650505050505050565b600060208284031215615a9857600080fd5b8151612a678161531f565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615af7816049850160208701615649565b919091016049019695505050505050565b600082821015615b1a57615b1a615879565b500390565b600067ffffffffffffffff80831681851681830481118215151615615b4657615b46615879565b02949350505050565b600067ffffffffffffffff808316818516808303821115615b7257615b72615879565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615bb957615bb9615b7b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615c0d57615c0d615879565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615c4c57615c4c615879565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615c8057615c80615879565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615cc757615cc7615879565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615d0257615d02615879565b60008712925087820587128484161615615d1e57615d1e615879565b87850587128184161615615d3457615d34615879565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615d7c57615d7c615879565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615db057615db0615879565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615dee57615dee615879565b500290565b600082615e0257615e02615b7b565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615e5260c0830184615675565b98975050505050505050565b805163ffffffff8116811461531a57600080fd5b600060c08284031215615e8457600080fd5b60405160c0810181811067ffffffffffffffff82111715615ea757615ea761532d565b604052615eb383615e5e565b81526020830151615ec3816156eb565b60208201526040830151615ed6816156eb565b6040820152615ee760608401615e5e565b6060820152615ef860808401615e5e565b6080820152615f0960a08401615917565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615f4657615f46615879565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615f8f57615f8f615b7b565b8060ff84160691505092915050565b600060ff821660ff841680821015615fb857615fb8615879565b90039392505050565b60008251615fd3818460208701615649565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; + hex"60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; bytes internal constant l1CrossDomainMessengerCode = - hex"6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a"; + hex"6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant l2OutputOracleCode = hex"60806040526004361061018a5760003560e01c806389c44cbb116100d6578063ce5db8d61161007f578063dcec334811610059578063dcec33481461049b578063e1a41bcf146104b0578063f4daa291146104c657600080fd5b8063ce5db8d614610445578063cf8e5cf01461045b578063d1de856c1461047b57600080fd5b8063a25ae557116100b0578063a25ae55714610391578063a8e4fb90146103ed578063bffa7f0f1461041a57600080fd5b806389c44cbb1461034857806393991af3146103685780639aaab6481461037e57600080fd5b806369f16eec1161013857806370872aa51161011257806370872aa5146102fc5780637f00642014610312578063887862721461033257600080fd5b806369f16eec146102a75780636abcf563146102bc5780636b4d98dd146102d157600080fd5b8063529933df11610169578063529933df146101ea578063534db0e2146101ff57806354fd4d501461025157600080fd5b80622134cc1461018f5780631c89c97d146101b35780634599c788146101d5575b600080fd5b34801561019b57600080fd5b506005545b6040519081526020015b60405180910390f35b3480156101bf57600080fd5b506101d36101ce3660046113a2565b6104db565b005b3480156101e157600080fd5b506101a06108b6565b3480156101f657600080fd5b506004546101a0565b34801561020b57600080fd5b5060065461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101aa565b34801561025d57600080fd5b5061029a6040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516101aa9190611405565b3480156102b357600080fd5b506101a0610929565b3480156102c857600080fd5b506003546101a0565b3480156102dd57600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561030857600080fd5b506101a060015481565b34801561031e57600080fd5b506101a061032d366004611478565b61093b565b34801561033e57600080fd5b506101a060025481565b34801561035457600080fd5b506101d3610363366004611478565b610b4f565b34801561037457600080fd5b506101a060055481565b6101d361038c366004611491565b610de9565b34801561039d57600080fd5b506103b16103ac366004611478565b61124a565b60408051825181526020808401516fffffffffffffffffffffffffffffffff9081169183019190915292820151909216908201526060016101aa565b3480156103f957600080fd5b5060075461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561042657600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561045157600080fd5b506101a060085481565b34801561046757600080fd5b506103b1610476366004611478565b6112de565b34801561048757600080fd5b506101a0610496366004611478565b611316565b3480156104a757600080fd5b506101a0611346565b3480156104bc57600080fd5b506101a060045481565b3480156104d257600080fd5b506008546101a0565b600054610100900460ff16158080156104fb5750600054600160ff909116105b806105155750303b158015610515575060005460ff166001145b6105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561060457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60008811610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e2030000000000000606482015260840161059d565b60008711610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e2030000000000000000000000000606482015260840161059d565b428511156107db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60048890556005879055600186905560028590556007805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556006805492861692909116919091179055600882905580156108ac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6003546000901561092057600380546108d1906001906114f2565b815481106108e1576108e1611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b600354600090610924906001906114f2565b60006109456108b6565b8211156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a40161059d565b600354610aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161059d565b6003546000905b80821015610b485760006002610acc8385611538565b610ad69190611550565b90508460038281548110610aec57610aec611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610b3e57610b37816001611538565b9250610b42565b8091505b50610ab6565b5092915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610bf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161059d565b6003548110610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60085460038281548110610cc357610cc3611509565b6000918252602090912060016002909202010154610cf3906fffffffffffffffffffffffffffffffff16426114f2565b10610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161059d565b6000610db160035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b610ebe611346565b8314610f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161059d565b42610f7c84611316565b10611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161059d565b83611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161059d565b81156111525781814014611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161059d565b8261115c60035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e24260405161118e91815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b60408051606081018252600080825260208201819052918101919091526003828154811061127a5761127a611509565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b604080516060810182526000808252602082018190529181019190915260036113068361093b565b8154811061127a5761127a611509565b60006005546001548361132991906114f2565b611333919061158b565b6002546113409190611538565b92915050565b60006004546113536108b6565b6109249190611538565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b803573ffffffffffffffffffffffffffffffffffffffff8116811461139d57600080fd5b919050565b600080600080600080600060e0888a0312156113bd57600080fd5b873596506020880135955060408801359450606088013593506113e260808901611379565b92506113f060a08901611379565b915060c0880135905092959891949750929550565b600060208083528351808285015260005b8181101561143257858101830151858201604001528201611416565b81811115611444576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561148a57600080fd5b5035919050565b600080600080608085870312156114a757600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611504576115046114c3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561154b5761154b6114c3565b500190565b600082611586577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156115c3576115c36114c3565b50029056fea164736f6c634300080f000a"; bytes internal constant systemConfigCode = - hex"608060405234801561001057600080fd5b50600436106102925760003560e01c8063a711986911610160578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de01461062e578063fd32aa0f14610636578063ffa1ad741461063e57600080fd5b8063f45e65d814610611578063f68016b71461061a57600080fd5b8063e81b2c6d116100bd578063e81b2c6d146105ed578063f2b4e617146105f6578063f2fde38b146105fe57600080fd5b8063e0e2016d146105dd578063e2a3285c146105e557600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b0214610499578063d8444715146105cd578063dac6e63a146105d557600080fd5b8063c71973f614610473578063c9b26f611461048657600080fd5b8063a711986914610448578063b40a817c14610450578063bc49ce5f14610463578063c4e8ddfa1461046b57600080fd5b80634add321d1161020e5780635d73369c116101c25780638da5cb5b116101a75780638da5cb5b1461040f578063935f029e1461042d5780639b7d7f0a1461044057600080fd5b80635d73369c146103ff578063715018a61461040757600080fd5b80634f16540b116101f35780634f16540b1461038757806354fd4d50146103ae578063550fcdc9146103f757600080fd5b80634add321d146103535780634c1e843d1461037457600080fd5b806318d13918116102655780631fd19ee11161024a5780631fd19ee11461030d5780634397dfef1461031557806348cd4cb11461034b57600080fd5b806318d13918146102f057806319f5cea81461030557600080fd5b806306c9265714610297578063078f29cf146102b25780630a49cb03146102df5780630c18c162146102e7575b600080fd5b61029f610646565b6040519081526020015b60405180910390f35b6102ba610674565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102a9565b6102ba6106ad565b61029f60655481565b6103036102fe366004611f41565b6106dd565b005b61029f6106f1565b6102ba61071c565b61031d610746565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102a9565b61029f61075a565b61035b61078a565b60405167ffffffffffffffff90911681526020016102a9565b6103036103823660046120b4565b6107b0565b61029f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6103ea6040518060400160405280600581526020017f322e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516102a99190612269565b6103ea610bbb565b61029f610bc5565b610303610bf0565b60335473ffffffffffffffffffffffffffffffffffffffff166102ba565b61030361043b36600461227c565b610c04565b6102ba610c1a565b6102ba610c4a565b61030361045e36600461229e565b610c7a565b61029f610c8b565b6102ba610cb6565b6103036104813660046122b9565b610ce6565b6103036104943660046122d5565b610cf7565b61055d6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102a99190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b6103ea610d08565b6102ba610d12565b61029f610d42565b61029f610d6d565b61029f60675481565b6102ba610d98565b61030361060c366004611f41565b610dc8565b61029f60665481565b60685461035b9067ffffffffffffffff1681565b61029f610e7c565b61029f610ea7565b61029f600081565b61067160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b81565b60006106a86106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b5490565b905090565b60006106a86106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b6106e5611090565b6106ee81611111565b50565b61067160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60006106a87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107516111ce565b90939092509050565b60006106a86106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b6069546000906106a89063ffffffff6a0100000000000000000000820481169116612334565b600054610100900460ff16158080156107d05750600054600160ff909116105b806107ea5750303b1580156107ea575060005460ff166001145b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156108d957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6108e161124b565b6108ea8a610dc8565b6108f3876112ea565b6108fd8989611312565b610906866113a3565b61092f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b61096261095d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b849055565b61099661099060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b83519055565b6109cd6109c460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b60208401519055565b610a046109fb60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b60408401519055565b610a3b610a3260017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60608401519055565b610a72610a6960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b60808401519055565b610aa9610aa060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60a08401519055565b610ab1611481565b610abe8260c001516114e9565b610ac7846117e2565b610acf61078a565b67ffffffffffffffff168667ffffffffffffffff161015610b4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b8015610baf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106a8611c56565b61067160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610bf8611090565b610c026000611d17565b565b610c0c611090565b610c168282611312565b5050565b60006106a86106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d61231d565b60006106a86106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063761231d565b610c82611090565b6106ee816113a3565b61067160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b60006106a86106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a861231d565b610cee611090565b6106ee816117e2565b610cff611090565b6106ee816112ea565b60606106a8611d8e565b60006106a86106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59861231d565b61067160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b61067160017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b60006106a86106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90761231d565b610dd0611090565b73ffffffffffffffffffffffffffffffffffffffff8116610e73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610872565b6106ee81611d17565b61067160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637761231d565b61067160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad61231d565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610f86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e203332206279746573000000000000000000006064820152608401610872565b610f8f82611067565b92915050565b610ffb610fc360017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b61102e61102960017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b839055565b61106161105c60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b829055565b50505050565b80516021811061107f5763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c02576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610872565b61113a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516111c29190612269565b60405180910390a35050565b600080806112006106a460017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec61231d565b73ffffffffffffffffffffffffffffffffffffffff8116935090508261123f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b600054610100900460ff166112e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c02611e44565b6067819055604080516020808201849052825180830390910181529082019091526000611191565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516113969190612269565b60405180910390a3505050565b6113ab61078a565b67ffffffffffffffff168167ffffffffffffffff161015611428576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611191565b6114af6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b600003610c0257610c026114e460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a061231d565b439055565b73ffffffffffffffffffffffffffffffffffffffff811615801590611538575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b156106ee57601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561158d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115b19190612360565b60ff1614611641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e0000000000000000000000000000000000006064820152608401610872565b60006116dc8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526116d7919081019061237d565b610ef2565b9050600061172e8373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611691573d6000803e3d6000fd5b905061173d8360128484610f95565b6117456106ad565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b1580156117c557600080fd5b505af11580156117d9573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d6178206261736500000000000000000000006064820152608401610872565b6001816040015160ff1611611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e203100000000000000000000000000000000006064820152608401610872565b6068546080820151825167ffffffffffffffff9092169161194a9190612448565b63ffffffff1611156119b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77006044820152606401610872565b6000816020015160ff1611611a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f74206265203000000000000000000000000000000000006064820152608401610872565b8051602082015163ffffffff82169160ff90911690611a6f908290612467565b611a7991906124b1565b63ffffffff1614611b0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d69740000000000000000006064820152608401610872565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611c626111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cdb57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576461231d565b611ee4565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611d9a6111ce565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e1357505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d11611d0c6106a460017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d61231d565b600054610100900460ff16611edb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610872565b610c0233611d17565b60405160005b82811a15611efa57600101611eea565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611f3c57600080fd5b919050565b600060208284031215611f5357600080fd5b611f5c82611f18565b9392505050565b803567ffffffffffffffff81168114611f3c57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715611fcd57611fcd611f7b565b60405290565b803563ffffffff81168114611f3c57600080fd5b60ff811681146106ee57600080fd5b600060c0828403121561200857600080fd5b60405160c0810181811067ffffffffffffffff8211171561202b5761202b611f7b565b60405290508061203a83611fd3565b8152602083013561204a81611fe7565b6020820152604083013561205d81611fe7565b604082015261206e60608401611fd3565b606082015261207f60808401611fd3565b608082015260a08301356fffffffffffffffffffffffffffffffff811681146120a757600080fd5b60a0919091015292915050565b6000806000806000806000806000898b036102808112156120d457600080fd5b6120dd8b611f18565b995060208b0135985060408b0135975060608b0135965061210060808c01611f63565b955061210e60a08c01611f18565b945061211d8c60c08d01611ff6565b935061212c6101808c01611f18565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe608201121561215e57600080fd5b50612167611faa565b6121746101a08c01611f18565b81526121836101c08c01611f18565b60208201526121956101e08c01611f18565b60408201526121a76102008c01611f18565b60608201526121b96102208c01611f18565b60808201526121cb6102408c01611f18565b60a08201526121dd6102608c01611f18565b60c0820152809150509295985092959850929598565b60005b8381101561220e5781810151838201526020016121f6565b838111156110615750506000910152565b600081518084526122378160208601602086016121f3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f5c602083018461221f565b6000806040838503121561228f57600080fd5b50508035926020909101359150565b6000602082840312156122b057600080fd5b611f5c82611f63565b600060c082840312156122cb57600080fd5b611f5c8383611ff6565b6000602082840312156122e757600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561232f5761232f6122ee565b500390565b600067ffffffffffffffff808316818516808303821115612357576123576122ee565b01949350505050565b60006020828403121561237257600080fd5b8151611f5c81611fe7565b60006020828403121561238f57600080fd5b815167ffffffffffffffff808211156123a757600080fd5b818401915084601f8301126123bb57600080fd5b8151818111156123cd576123cd611f7b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561241357612413611f7b565b8160405282815287602084870101111561242c57600080fd5b61243d8360208301602088016121f3565b979650505050505050565b600063ffffffff808316818516808303821115612357576123576122ee565b600063ffffffff808416806124a5577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156124d4576124d46122ee565b0294935050505056fea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a"; bytes internal constant l1StandardBridgeCode = - hex"60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a"; + hex"60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a"; bytes internal constant l1ERC721BridgeCode = hex"608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a"; } diff --git a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol index 1a8444cfe33..e20e94db3f7 100644 --- a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol +++ b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol @@ -28,7 +28,7 @@ contract GasPayingToken_Roundtrip_Test is Test { } /// @dev Test that the gas paying token returns values associated with Ether when unset. - function test_get_empty_succeeds() external { + function test_get_empty_succeeds() external view { (address token, uint8 decimals) = GasPayingToken.getToken(); assertEq(Constants.ETHER, token); assertEq(18, decimals); @@ -79,7 +79,7 @@ contract GasPayingToken_Roundtrip_Test is Test { } /// @dev Differentially test `sanitize`. - function testDiff_sanitize_succeeds(string memory _str) external { + function testDiff_sanitize_succeeds(string memory _str) external view { vm.assume(bytes(_str).length <= 32); vm.assume(bytes(_str).length > 0); @@ -105,7 +105,7 @@ contract GasPayingToken_Roundtrip_Test is Test { } /// @dev Test that `sanitize` works as expected when the input string is empty. - function test_sanitize_empty_succeeds() external { + function test_sanitize_empty_succeeds() external view { assertEq(GasPayingToken.sanitize(""), ""); } } From 990e8e0cb5ecc808ee1015de3e6f5873fc27428e Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 19 Apr 2024 13:18:18 -0600 Subject: [PATCH 15/45] build: fix --- .../contracts-bedrock/test/libraries/GasPayingToken.t.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol index e20e94db3f7..caeb52ca87f 100644 --- a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol +++ b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol @@ -79,7 +79,7 @@ contract GasPayingToken_Roundtrip_Test is Test { } /// @dev Differentially test `sanitize`. - function testDiff_sanitize_succeeds(string memory _str) external view { + function testDiff_sanitize_succeeds(string memory _str) external pure { vm.assume(bytes(_str).length <= 32); vm.assume(bytes(_str).length > 0); @@ -105,7 +105,7 @@ contract GasPayingToken_Roundtrip_Test is Test { } /// @dev Test that `sanitize` works as expected when the input string is empty. - function test_sanitize_empty_succeeds() external view { + function test_sanitize_empty_succeeds() external pure { assertEq(GasPayingToken.sanitize(""), ""); } } From 2bdce530b2c17816ed90d461fac09063ed0ee1b7 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Fri, 19 Apr 2024 16:53:11 -0600 Subject: [PATCH 16/45] custom-gas-token: fix build --- packages/contracts-bedrock/test/Specs.t.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/contracts-bedrock/test/Specs.t.sol b/packages/contracts-bedrock/test/Specs.t.sol index a2c55893289..33d6954fbac 100644 --- a/packages/contracts-bedrock/test/Specs.t.sol +++ b/packages/contracts-bedrock/test/Specs.t.sol @@ -384,6 +384,7 @@ contract Specification_Test is CommonTest { _addSpec({ _name: "SystemConfig", _sel: _getSel("gasPayingToken()") }); _addSpec({ _name: "SystemConfig", _sel: _getSel("gasPayingTokenName()") }); _addSpec({ _name: "SystemConfig", _sel: _getSel("gasPayingTokenSymbol()") }); + _addSpec({ _name: "SystemConfig", _sel: _getSel("isCustomGasToken()") }); // ProxyAdmin _addSpec({ _name: "ProxyAdmin", _sel: _getSel("addressManager()") }); From 8e439f064f3c93b1c11b2299acbc71525587957e Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Mon, 22 Apr 2024 21:28:59 -0600 Subject: [PATCH 17/45] custom-gas-token: cleanup, final spec nits --- op-bindings/bindings/crossdomainmessenger.go | 169 ++++++++---- .../bindings/l1crossdomainmessenger.go | 118 +++++++-- op-bindings/bindings/l1standardbridge.go | 118 +++++++-- .../bindings/l2crossdomainmessenger.go | 118 +++++++-- op-bindings/bindings/l2standardbridge.go | 118 +++++++-- op-bindings/bindings/standardbridge.go | 169 ++++++++---- packages/contracts-bedrock/semver-lock.json | 20 +- .../snapshots/abi/L1CrossDomainMessenger.json | 28 +- .../snapshots/abi/L1StandardBridge.json | 28 +- .../snapshots/abi/L2CrossDomainMessenger.json | 28 +- .../snapshots/abi/L2StandardBridge.json | 28 +- .../snapshots/state-diff/Kontrol-Deploy.json | 240 +++++++++--------- .../src/L1/L1CrossDomainMessenger.sol | 10 + .../src/L1/L1StandardBridge.sol | 10 + .../contracts-bedrock/src/L1/SystemConfig.sol | 4 +- packages/contracts-bedrock/src/L2/L1Block.sol | 4 +- .../src/L2/L2CrossDomainMessenger.sol | 10 + .../src/L2/L2StandardBridge.sol | 10 + .../src/libraries/GasPayingToken.sol | 14 + .../src/universal/CrossDomainMessenger.sol | 21 +- .../src/universal/StandardBridge.sol | 16 +- .../test/L1/L1CrossDomainMessenger.t.sol | 2 +- .../test/L1/L1StandardBridge.t.sol | 2 +- .../test/L2/L2CrossDomainMessenger.t.sol | 2 +- .../test/L2/L2StandardBridge.t.sol | 2 +- .../proofs/utils/DeploymentSummary.sol | 8 +- .../proofs/utils/DeploymentSummaryCode.sol | 4 +- .../test/universal/StandardBridge.t.sol | 8 + 28 files changed, 971 insertions(+), 338 deletions(-) diff --git a/op-bindings/bindings/crossdomainmessenger.go b/op-bindings/bindings/crossdomainmessenger.go index 8bfc6048119..a4ba04ec103 100644 --- a/op-bindings/bindings/crossdomainmessenger.go +++ b/op-bindings/bindings/crossdomainmessenger.go @@ -30,7 +30,7 @@ var ( // CrossDomainMessengerMetaData contains all meta data concerning the CrossDomainMessenger contract. var CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", } // CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -520,6 +520,131 @@ func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) FailedMessages(a return _CrossDomainMessenger.Contract.FailedMessages(&_CrossDomainMessenger.CallOpts, arg0) } +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address, uint8) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) GasPayingToken(opts *bind.CallOpts) (common.Address, uint8, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "gasPayingToken") + + if err != nil { + return *new(common.Address), *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out1 := *abi.ConvertType(out[1], new(uint8)).(*uint8) + + return out0, out1, err + +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address, uint8) +func (_CrossDomainMessenger *CrossDomainMessengerSession) GasPayingToken() (common.Address, uint8, error) { + return _CrossDomainMessenger.Contract.GasPayingToken(&_CrossDomainMessenger.CallOpts) +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address, uint8) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) GasPayingToken() (common.Address, uint8, error) { + return _CrossDomainMessenger.Contract.GasPayingToken(&_CrossDomainMessenger.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenName") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string) +func (_CrossDomainMessenger *CrossDomainMessengerSession) GasPayingTokenName() (string, error) { + return _CrossDomainMessenger.Contract.GasPayingTokenName(&_CrossDomainMessenger.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) GasPayingTokenName() (string, error) { + return _CrossDomainMessenger.Contract.GasPayingTokenName(&_CrossDomainMessenger.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenSymbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string) +func (_CrossDomainMessenger *CrossDomainMessengerSession) GasPayingTokenSymbol() (string, error) { + return _CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_CrossDomainMessenger.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) GasPayingTokenSymbol() (string, error) { + return _CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_CrossDomainMessenger.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _CrossDomainMessenger.contract.Call(opts, &out, "isCustomGasToken") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerSession) IsCustomGasToken() (bool, error) { + return _CrossDomainMessenger.Contract.IsCustomGasToken(&_CrossDomainMessenger.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) IsCustomGasToken() (bool, error) { + return _CrossDomainMessenger.Contract.IsCustomGasToken(&_CrossDomainMessenger.CallOpts) +} + // MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // // Solidity: function messageNonce() view returns(uint256) @@ -675,48 +800,6 @@ func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) XDomainMessageSe return _CrossDomainMessenger.Contract.XDomainMessageSender(&_CrossDomainMessenger.CallOpts) } -// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() returns(address, uint8) -func (_CrossDomainMessenger *CrossDomainMessengerTransactor) GasPayingToken(opts *bind.TransactOpts) (*types.Transaction, error) { - return _CrossDomainMessenger.contract.Transact(opts, "gasPayingToken") -} - -// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() returns(address, uint8) -func (_CrossDomainMessenger *CrossDomainMessengerSession) GasPayingToken() (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.GasPayingToken(&_CrossDomainMessenger.TransactOpts) -} - -// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() returns(address, uint8) -func (_CrossDomainMessenger *CrossDomainMessengerTransactorSession) GasPayingToken() (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.GasPayingToken(&_CrossDomainMessenger.TransactOpts) -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { - return _CrossDomainMessenger.contract.Transact(opts, "isCustomGasToken") -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerSession) IsCustomGasToken() (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.IsCustomGasToken(&_CrossDomainMessenger.TransactOpts) -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerTransactorSession) IsCustomGasToken() (*types.Transaction, error) { - return _CrossDomainMessenger.Contract.IsCustomGasToken(&_CrossDomainMessenger.TransactOpts) -} - // RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. // // Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() diff --git a/op-bindings/bindings/l1crossdomainmessenger.go b/op-bindings/bindings/l1crossdomainmessenger.go index 15a540c08f9..a6bf19bc591 100644 --- a/op-bindings/bindings/l1crossdomainmessenger.go +++ b/op-bindings/bindings/l1crossdomainmessenger.go @@ -30,8 +30,8 @@ var ( // L1CrossDomainMessengerMetaData contains all meta data concerning the L1CrossDomainMessenger contract. var L1CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PORTAL\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"_addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_portal\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PORTAL\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"_addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_portal\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620018671760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612471806200029e6000396000f3fe6080604052600436106101b75760003560e01c80635c975abb116100ec578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610534578063d844471514610547578063db505d801461055c578063ecc704281461058957600080fd5b8063b1b1b209146104c4578063b28ade25146104f4578063c0c53b8b1461051457600080fd5b806383a74074116100c657806383a74074146104525780638cbeeef2146103645780639fce812c14610469578063a4e7f8bd1461049457600080fd5b80635c975abb146103fb5780636425666b146104105780636e296e451461043d57600080fd5b80633dbb202b116101595780634c1d6a69116101335780634c1d6a691461036457806354fd4d501461037a578063550fcdc9146103d05780635644cfdf146103e557600080fd5b80633dbb202b146102e45780633f827a5a146102f95780634397dfef1461032157600080fd5b8063213268491161019557806321326849146102505780632828d7e81461027557806333d7e2bd1461028a57806335e80ab3146102b757600080fd5b8063028f85f7146101bc5780630c568498146101ef5780630ff754ea14610204575b600080fd5b3480156101c857600080fd5b506101d1601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506101d1603f81565b34801561021057600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b34801561025c57600080fd5b506102656105ee565b60405190151581526020016101e6565b34801561028157600080fd5b506101d1604081565b34801561029657600080fd5b5060fd5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102c357600080fd5b5060fb5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f76102f2366004611db3565b61062d565b005b34801561030557600080fd5b5061030e600181565b60405161ffff90911681526020016101e6565b34801561032d57600080fd5b5061033661092a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101e6565b34801561037057600080fd5b506101d1619c4081565b34801561038657600080fd5b506103c36040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101e69190611e90565b3480156103dc57600080fd5b506103c36109c7565b3480156103f157600080fd5b506101d161138881565b34801561040757600080fd5b50610265610a82565b34801561041c57600080fd5b5060fc5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044957600080fd5b5061022b610b16565b34801561045e57600080fd5b506101d162030d4081565b34801561047557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661022b565b3480156104a057600080fd5b506102656104af366004611eaa565b60ce6020526000908152604090205460ff1681565b3480156104d057600080fd5b506102656104df366004611eaa565b60cb6020526000908152604090205460ff1681565b34801561050057600080fd5b506101d161050f366004611ec3565b610bfd565b34801561052057600080fd5b506102f761052f366004611f17565b610c6b565b6102f7610542366004611f62565b610ee2565b34801561055357600080fd5b506103c36117f7565b34801561056857600080fd5b5060cf5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059557600080fd5b506105e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101e6565b6000806105f961092a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6106356105ee565b156106cd5734156106cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107ff9073ffffffffffffffffffffffffffffffffffffffff166106f5858585610bfd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061076160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161077d9796959493929190612031565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611883565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561088460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610896959493929190612090565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906120de565b90939092509050565b60fd54604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7d919081019061214d565b905090565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612218565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016106c4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610c19604063ffffffff8816612269565b610c239190612299565b610c2e601088612269565b610c3b9062030d406122e7565b610c4591906122e7565b610c4f91906122e7565b610c5991906122e7565b610c6391906122e7565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610cb6575060005460017401000000000000000000000000000000000000000090910460ff16105b80610ce85750303b158015610ce8575060005474010000000000000000000000000000000000000000900460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106c4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610dfa57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610e7973420000000000000000000000000000000000000761191c565b8015610edc57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610eea610a82565b15610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016106c4565b60f087901c6002811061100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016106c4565b8061ffff1660000361110157600061105d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611a58915050565b600081815260cb602052604090205490915060ff16156110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016106c4565b505b6000611147898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7792505050565b9050611151611a9a565b156111895785341461116557611165612313565b600081815260ce602052604090205460ff161561118457611184612313565b6112db565b341561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016106c4565b600081815260ce602052604090205460ff166112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016106c4565b6112e487611b76565b15611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016106c4565b600081815260cb602052604090205460ff1615611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016106c4565b61145785611448611388619c406122e7565b67ffffffffffffffff16611bbc565b158061147d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561159657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b50506117ee565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061162788619c405a6115ea9190612342565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bda92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156116dd57600082815260cb602052604090205460ff161561167a5761167a612313565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26117ea565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b5050505b50505050505050565b60fd54604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906118e4908890839089906000908990600401612359565b6000604051808303818588803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106c4565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611a115760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a6685858585611bf4565b805190602001209050949350505050565b6000611a87878787878787611c8d565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a7d575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a91906123a6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611bb6575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611c0d94939291906123c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611caa9695949392919061240d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d4e57600080fd5b50565b60008083601f840112611d6357600080fd5b50813567ffffffffffffffff811115611d7b57600080fd5b602083019150836020828501011115611d9357600080fd5b9250929050565b803563ffffffff81168114611dae57600080fd5b919050565b60008060008060608587031215611dc957600080fd5b8435611dd481611d2c565b9350602085013567ffffffffffffffff811115611df057600080fd5b611dfc87828801611d51565b9094509250611e0f905060408601611d9a565b905092959194509250565b60005b83811015611e35578181015183820152602001611e1d565b83811115610edc5750506000910152565b60008151808452611e5e816020860160208601611e1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ea36020830184611e46565b9392505050565b600060208284031215611ebc57600080fd5b5035919050565b600080600060408486031215611ed857600080fd5b833567ffffffffffffffff811115611eef57600080fd5b611efb86828701611d51565b9094509250611f0e905060208501611d9a565b90509250925092565b600080600060608486031215611f2c57600080fd5b8335611f3781611d2c565b92506020840135611f4781611d2c565b91506040840135611f5781611d2c565b809150509250925092565b600080600080600080600060c0888a031215611f7d57600080fd5b873596506020880135611f8f81611d2c565b95506040880135611f9f81611d2c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611fc957600080fd5b611fd58a828b01611d51565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261208360c083018486611fe8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c0608083018688611fe8565b905083604083015263ffffffff831660608301529695505050505050565b600080604083850312156120f157600080fd5b82516120fc81611d2c565b602084015190925060ff8116811461211357600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561215f57600080fd5b815167ffffffffffffffff8082111561217757600080fd5b818401915084601f83011261218b57600080fd5b81518181111561219d5761219d61211e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e361211e565b816040528281528760208487010111156121fc57600080fd5b61220d836020830160208801611e1a565b979650505050505050565b60006020828403121561222a57600080fd5b81518015158114611ea357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156122905761229061223a565b02949350505050565b600067ffffffffffffffff808416806122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561230a5761230a61223a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156123545761235461223a565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061220d60a0830184611e46565b6000602082840312156123b857600080fd5b8151611ea381611d2c565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526123fc6080830185611e46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261245860c0830184611e46565b9897505050505050505056fea164736f6c634300080f000a", } // L1CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -618,6 +618,99 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) GasPayingTok return _L1CrossDomainMessenger.Contract.GasPayingToken(&_L1CrossDomainMessenger.CallOpts) } +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenName") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) GasPayingTokenName() (string, error) { + return _L1CrossDomainMessenger.Contract.GasPayingTokenName(&_L1CrossDomainMessenger.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) GasPayingTokenName() (string, error) { + return _L1CrossDomainMessenger.Contract.GasPayingTokenName(&_L1CrossDomainMessenger.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenSymbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) GasPayingTokenSymbol() (string, error) { + return _L1CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_L1CrossDomainMessenger.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) GasPayingTokenSymbol() (string, error) { + return _L1CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_L1CrossDomainMessenger.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _L1CrossDomainMessenger.contract.Call(opts, &out, "isCustomGasToken") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) IsCustomGasToken() (bool, error) { + return _L1CrossDomainMessenger.Contract.IsCustomGasToken(&_L1CrossDomainMessenger.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) IsCustomGasToken() (bool, error) { + return _L1CrossDomainMessenger.Contract.IsCustomGasToken(&_L1CrossDomainMessenger.CallOpts) +} + // MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // // Solidity: function messageNonce() view returns(uint256) @@ -918,27 +1011,6 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) Initiali return _L1CrossDomainMessenger.Contract.Initialize(&_L1CrossDomainMessenger.TransactOpts, _superchainConfig, _portal, _systemConfig) } -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1CrossDomainMessenger.contract.Transact(opts, "isCustomGasToken") -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) IsCustomGasToken() (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.IsCustomGasToken(&_L1CrossDomainMessenger.TransactOpts) -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerTransactorSession) IsCustomGasToken() (*types.Transaction, error) { - return _L1CrossDomainMessenger.Contract.IsCustomGasToken(&_L1CrossDomainMessenger.TransactOpts) -} - // RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. // // Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() diff --git a/op-bindings/bindings/l1standardbridge.go b/op-bindings/bindings/l1standardbridge.go index 19d4f3365a7..e4f06e816af 100644 --- a/op-bindings/bindings/l1standardbridge.go +++ b/op-bindings/bindings/l1standardbridge.go @@ -30,8 +30,8 @@ var ( // L1StandardBridgeMetaData contains all meta data concerning the L1StandardBridge contract. var L1StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositERC20\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositERC20To\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeERC20Withdrawal\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeETHWithdrawal\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_messenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l2TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20DepositInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20WithdrawalFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHDepositInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHWithdrawalFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositERC20\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositERC20To\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeERC20Withdrawal\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeETHWithdrawal\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_messenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20DepositInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20WithdrawalFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHDepositInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHWithdrawalFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620006371760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6131e4806200025b6000396000f3fe6080604052600436106101b05760003560e01c80635c975abb116100ec5780639a2ac6d51161008a578063c0c53b8b11610064578063c0c53b8b146105c2578063c89701a2146105e2578063d84447151461060f578063e11013dd1461062457600080fd5b80639a2ac6d51461057c578063a9f9e6751461058f578063b1a1a882146105af57600080fd5b806387087623116100c657806387087623146104eb5780638f601f661461050b57806391c49bf8146104a0578063927ede2d1461055157600080fd5b80635c975abb1461048b5780637f46ddb2146104a0578063838b2520146104cb57600080fd5b806335e80ab311610159578063540abf7311610133578063540abf73146103e057806354fd4d5014610400578063550fcdc91461045657806358a997f61461046b57600080fd5b806335e80ab3146103435780633cb747bf146103705780634397dfef1461039d57600080fd5b80631635f5fd1161018a5780631635f5fd146102b457806321326849146102c757806333d7e2bd146102f157600080fd5b80630166a07a1461026e57806309fc88431461028e5780631532ec34146102a157600080fd5b3661026957333b15610249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610267333362030d4060405180602001604052806000815250610653565b005b600080fd5b34801561027a57600080fd5b50610267610289366004612ad9565b610666565b61026761029c366004612b8a565b610a80565b6102676102af366004612bdd565b610b57565b6102676102c2366004612bdd565b610b6b565b3480156102d357600080fd5b506102dc6110c9565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5060335461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e8565b34801561034f57600080fd5b5060325461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037c57600080fd5b5060035461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103b2611108565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102e8565b3480156103ec57600080fd5b506102676103fb366004612c50565b6111a5565b34801561040c57600080fd5b506104496040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e89190612d3d565b34801561046257600080fd5b506104496111ea565b34801561047757600080fd5b50610267610486366004612d50565b6112a5565b34801561049757600080fd5b506102dc611379565b3480156104ac57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661031e565b3480156104d757600080fd5b506102676104e6366004612c50565b61140d565b3480156104f757600080fd5b50610267610506366004612d50565b611452565b34801561051757600080fd5b50610543610526366004612dd3565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e8565b34801561055d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661031e565b61026761058a366004612e0c565b611526565b34801561059b57600080fd5b506102676105aa366004612ad9565b611568565b6102676105bd366004612b8a565b611577565b3480156105ce57600080fd5b506102676105dd366004612e6f565b611648565b3480156105ee57600080fd5b5060045461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061b57600080fd5b50610449611847565b610267610632366004612e0c565b6118b7565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61066084843485856118fa565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610739575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107219190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b6107eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b6107f3611379565b1561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b61086387611b59565b156109b1576108728787611bbb565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050610a33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109ef908490612f06565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a33908585611cdb565b610a77878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611daf92505050565b50505050505050565b333b15610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b523333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b505050565b610b648585858585610b6b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c3e575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b610cf8611379565b15610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b610d676110c9565b15610df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610240565b3073ffffffffffffffffffffffffffffffffffffffff851603610f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610240565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610240565b61101585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3d92505050565b6000611032855a8660405180602001604052806000815250611eb0565b9050806110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610240565b505050505050565b6000806110d4611108565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612f1d565b90939092509050565b610a7787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b603354604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112a09190810190612f81565b905090565b333b15611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613041565b610a7787873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b333b156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b61066033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b610a7787878787878787610666565b333b15611606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b5233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b600054610100900460ff16158080156116685750600054600160ff909116105b806116825750303b158015611682575060005460ff166001145b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610240565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561176c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556117df84734200000000000000000000000000000000000010612204565b801561066057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b603354604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b6106603385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b6119026110c9565b1561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610240565b611a2a858585846122ee565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a8d908b908b9086908a90602401613063565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b20929188906004016130ac565b6000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050505050505050565b6000611b85827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80611bb55750611bb5827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b92915050565b6000611be7837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611c90578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611bb5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b529084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612384565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611e27939291906130f1565b60405180910390a46110c1868686868686612490565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e9c92919061312f565b60405180910390a361066084848484612518565b600080600080845160208601878a8af19695505050505050565b611ed387611b59565b1561202157611ee28787611bbb565b611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506120b5565b61204373ffffffffffffffffffffffffffffffffffffffff8816863086612585565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054612081908490613148565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6120c38787878787866125e3565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090612127908b908d908c908c908c908b90602401613160565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526121ba929187906004016130ac565b600060405180830381600087803b1580156121d457600080fd5b505af11580156121e8573d6000803e3d6000fd5b5050505050505050505050565b610a7787878787878787611eca565b600054610100900460ff1661229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610240565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161234d92919061312f565b60405180910390a361066084848484612671565b600061236c836126d0565b801561237d575061237d8383612734565b9392505050565b60006123e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128039092919063ffffffff16565b805190915015610b5257808060200190518101906124049190613041565b610b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610240565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051612508939291906130f1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161257792919061312f565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161265b939291906130f1565b60405180910390a46110c186868686868661281a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161257792919061312f565b60006126fc827f01ffc9a700000000000000000000000000000000000000000000000000000000612734565b8015611bb5575061272d827fffffffff00000000000000000000000000000000000000000000000000000000612734565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156127ec575060208210155b80156127f85750600081115b979650505050505050565b60606128128484600085612892565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051612508939291906130f1565b606082471015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610240565b73ffffffffffffffffffffffffffffffffffffffff85163b6129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610240565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129cb91906131bb565b60006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b50915091506127f882828660608315612a2757508161237d565b825115612a375782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102409190612d3d565b73ffffffffffffffffffffffffffffffffffffffff81168114612a8d57600080fd5b50565b60008083601f840112612aa257600080fd5b50813567ffffffffffffffff811115612aba57600080fd5b602083019150836020828501011115612ad257600080fd5b9250929050565b600080600080600080600060c0888a031215612af457600080fd5b8735612aff81612a6b565b96506020880135612b0f81612a6b565b95506040880135612b1f81612a6b565b94506060880135612b2f81612a6b565b93506080880135925060a088013567ffffffffffffffff811115612b5257600080fd5b612b5e8a828b01612a90565b989b979a50959850939692959293505050565b803563ffffffff81168114612b8557600080fd5b919050565b600080600060408486031215612b9f57600080fd5b612ba884612b71565b9250602084013567ffffffffffffffff811115612bc457600080fd5b612bd086828701612a90565b9497909650939450505050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612a6b565b94506020860135612c1081612a6b565b935060408601359250606086013567ffffffffffffffff811115612c3357600080fd5b612c3f88828901612a90565b969995985093965092949392505050565b600080600080600080600060c0888a031215612c6b57600080fd5b8735612c7681612a6b565b96506020880135612c8681612a6b565b95506040880135612c9681612a6b565b945060608801359350612cab60808901612b71565b925060a088013567ffffffffffffffff811115612b5257600080fd5b60005b83811015612ce2578181015183820152602001612cca565b838111156106605750506000910152565b60008151808452612d0b816020860160208601612cc7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184612cf3565b60008060008060008060a08789031215612d6957600080fd5b8635612d7481612a6b565b95506020870135612d8481612a6b565b945060408701359350612d9960608801612b71565b9250608087013567ffffffffffffffff811115612db557600080fd5b612dc189828a01612a90565b979a9699509497509295939492505050565b60008060408385031215612de657600080fd5b8235612df181612a6b565b91506020830135612e0181612a6b565b809150509250929050565b60008060008060608587031215612e2257600080fd5b8435612e2d81612a6b565b9350612e3b60208601612b71565b9250604085013567ffffffffffffffff811115612e5757600080fd5b612e6387828801612a90565b95989497509550505050565b600080600060608486031215612e8457600080fd5b8335612e8f81612a6b565b92506020840135612e9f81612a6b565b91506040840135612eaf81612a6b565b809150509250925092565b600060208284031215612ecc57600080fd5b815161237d81612a6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f1857612f18612ed7565b500390565b60008060408385031215612f3057600080fd5b8251612f3b81612a6b565b602084015190925060ff81168114612e0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f9357600080fd5b815167ffffffffffffffff80821115612fab57600080fd5b818401915084601f830112612fbf57600080fd5b815181811115612fd157612fd1612f52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561301757613017612f52565b8160405282815287602084870101111561303057600080fd5b6127f8836020830160208801612cc7565b60006020828403121561305357600080fd5b8151801515811461237d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130a26080830184612cf3565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130db6060830185612cf3565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006131266060830184612cf3565b95945050505050565b8281526040602082015260006128126040830184612cf3565b6000821982111561315b5761315b612ed7565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526131af60c0830184612cf3565b98975050505050505050565b600082516131cd818460208701612cc7565b919091019291505056fea164736f6c634300080f000a", } // L1StandardBridgeABI is the input ABI used to generate the binding from. @@ -339,6 +339,99 @@ func (_L1StandardBridge *L1StandardBridgeCallerSession) GasPayingToken() (struct return _L1StandardBridge.Contract.GasPayingToken(&_L1StandardBridge.CallOpts) } +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L1StandardBridge *L1StandardBridgeCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "gasPayingTokenName") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L1StandardBridge *L1StandardBridgeSession) GasPayingTokenName() (string, error) { + return _L1StandardBridge.Contract.GasPayingTokenName(&_L1StandardBridge.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L1StandardBridge *L1StandardBridgeCallerSession) GasPayingTokenName() (string, error) { + return _L1StandardBridge.Contract.GasPayingTokenName(&_L1StandardBridge.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L1StandardBridge *L1StandardBridgeCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "gasPayingTokenSymbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L1StandardBridge *L1StandardBridgeSession) GasPayingTokenSymbol() (string, error) { + return _L1StandardBridge.Contract.GasPayingTokenSymbol(&_L1StandardBridge.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L1StandardBridge *L1StandardBridgeCallerSession) GasPayingTokenSymbol() (string, error) { + return _L1StandardBridge.Contract.GasPayingTokenSymbol(&_L1StandardBridge.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L1StandardBridge *L1StandardBridgeCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _L1StandardBridge.contract.Call(opts, &out, "isCustomGasToken") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L1StandardBridge *L1StandardBridgeSession) IsCustomGasToken() (bool, error) { + return _L1StandardBridge.Contract.IsCustomGasToken(&_L1StandardBridge.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L1StandardBridge *L1StandardBridgeCallerSession) IsCustomGasToken() (bool, error) { + return _L1StandardBridge.Contract.IsCustomGasToken(&_L1StandardBridge.CallOpts) +} + // L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. // // Solidity: function l2TokenBridge() view returns(address) @@ -829,27 +922,6 @@ func (_L1StandardBridge *L1StandardBridgeTransactorSession) Initialize(_messenge return _L1StandardBridge.Contract.Initialize(&_L1StandardBridge.TransactOpts, _messenger, _superchainConfig, _systemConfig) } -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L1StandardBridge *L1StandardBridgeTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1StandardBridge.contract.Transact(opts, "isCustomGasToken") -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L1StandardBridge *L1StandardBridgeSession) IsCustomGasToken() (*types.Transaction, error) { - return _L1StandardBridge.Contract.IsCustomGasToken(&_L1StandardBridge.TransactOpts) -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L1StandardBridge *L1StandardBridgeTransactorSession) IsCustomGasToken() (*types.Transaction, error) { - return _L1StandardBridge.Contract.IsCustomGasToken(&_L1StandardBridge.TransactOpts) -} - // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() diff --git a/op-bindings/bindings/l2crossdomainmessenger.go b/op-bindings/bindings/l2crossdomainmessenger.go index dbf5ee6c704..033b5b06c1e 100644 --- a/op-bindings/bindings/l2crossdomainmessenger.go +++ b/op-bindings/bindings/l2crossdomainmessenger.go @@ -30,8 +30,8 @@ var ( // L2CrossDomainMessengerMetaData contains all meta data concerning the L2CrossDomainMessenger contract. var L2CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000239565b600054600160a81b900460ff16158080156200004d57506000546001600160a01b90910460ff16105b806200008457506200006a306200017360201b620014e11760201c565b158015620000845750600054600160a01b900460ff166001145b620000ed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011b576000805460ff60a81b1916600160a81b1790555b620001268262000182565b80156200016f576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e4565b60cc546001600160a01b0316620002175760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611e9c80620002496000396000f3fe6080604052600436106101805760003560e01c80636e296e45116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b14610439578063db505d801461044c578063ecc704281461047957600080fd5b8063b1b1b209146103c9578063b28ade25146103f9578063c4d66de81461041957600080fd5b80639fce812c116100b05780639fce812c1461036e578063a4e7f8bd14610399578063a71198691461036e57600080fd5b80636e296e451461031d57806383a74074146103575780638cbeeef21461028757600080fd5b80633f827a5a1161013857806354fd4d501161011257806354fd4d501461029d5780635644cfdf146102f35780635c975abb1461030957600080fd5b80633f827a5a1461021c5780634397dfef146102445780634c1d6a691461028757600080fd5b8063213268491161016957806321326849146101cd5780632828d7e8146101f25780633dbb202b1461020757600080fd5b8063028f85f7146101855780630c568498146101b8575b600080fd5b34801561019157600080fd5b5061019a601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101c457600080fd5b5061019a603f81565b3480156101d957600080fd5b506101e26104de565b60405190151581526020016101af565b3480156101fe57600080fd5b5061019a604081565b61021a610215366004611955565b61051d565b005b34801561022857600080fd5b50610231600181565b60405161ffff90911681526020016101af565b34801561025057600080fd5b5061025961081a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101af565b34801561029357600080fd5b5061019a619c4081565b3480156102a957600080fd5b506102e66040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101af9190611a27565b3480156102ff57600080fd5b5061019a61138881565b34801561031557600080fd5b5060006101e2565b34801561032957600080fd5b506103326108a8565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101af565b34801561036357600080fd5b5061019a62030d4081565b34801561037a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610332565b3480156103a557600080fd5b506101e26103b4366004611a41565b60ce6020526000908152604090205460ff1681565b3480156103d557600080fd5b506101e26103e4366004611a41565b60cb6020526000908152604090205460ff1681565b34801561040557600080fd5b5061019a610414366004611a5a565b61098f565b34801561042557600080fd5b5061021a610434366004611aae565b6109fd565b61021a610447366004611acb565b610bfc565b34801561045857600080fd5b5060cf546103329073ffffffffffffffffffffffffffffffffffffffff1681565b34801561048557600080fd5b506104d060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101af565b6000806104e961081a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105256104de565b156105bd5734156105bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546106ef9073ffffffffffffffffffffffffffffffffffffffff166105e585858561098f565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061065160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161066d9796959493929190611b9a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526114fd565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561077460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610786959493929190611bf9565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa15801561087b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089f9190611c47565b90939092509050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105b4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109ab604063ffffffff8816611cb6565b6109b59190611ce6565b6109c0601088611cb6565b6109cd9062030d40611d34565b6109d79190611d34565b6109e19190611d34565b6109eb9190611d34565b6109f59190611d34565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a48575060005460017401000000000000000000000000000000000000000090910460ff16105b80610a7a5750303b158015610a7a575060005474010000000000000000000000000000000000000000900460ff166001145b610b06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105b4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610b8c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610b958261158b565b8015610bf857600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610cb7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105b4565b8061ffff16600003610dac576000610d08878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506116c7915050565b600081815260cb602052604090205490915060ff1615610daa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105b4565b505b6000610df2898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506116e692505050565b9050610e3b60cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610e7357853414610e4f57610e4f611d60565b600081815260ce602052604090205460ff1615610e6e57610e6e611d60565b610fc5565b3415610f27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105b4565b600081815260ce602052604090205460ff16610fc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105b4565b610fce87611709565b15611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105b4565b600081815260cb602052604090205460ff1615611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105b4565b61114185611132611388619c40611d34565b67ffffffffffffffff1661175e565b1580611167575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561128057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611279576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105b4565b50506114d8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061131188619c405a6112d49190611d8f565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061177c92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156113c757600082815260cb602052604090205460ff161561136457611364611d60565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26114d4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016114d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105b4565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac90849061155390889088908790600401611da6565b6000604051808303818588803b15801561156c57600080fd5b505af1158015611580573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611636576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105b4565b60cc5473ffffffffffffffffffffffffffffffffffffffff166116805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006116d585858585611796565b805190602001209050949350505050565b60006116f687878787878761182f565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611758575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016117af9493929190611dee565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b606086868686868660405160240161184c96959493929190611e38565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff811681146118f057600080fd5b50565b60008083601f84011261190557600080fd5b50813567ffffffffffffffff81111561191d57600080fd5b60208301915083602082850101111561193557600080fd5b9250929050565b803563ffffffff8116811461195057600080fd5b919050565b6000806000806060858703121561196b57600080fd5b8435611976816118ce565b9350602085013567ffffffffffffffff81111561199257600080fd5b61199e878288016118f3565b90945092506119b190506040860161193c565b905092959194509250565b6000815180845260005b818110156119e2576020818501810151868301820152016119c6565b818111156119f4576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a3a60208301846119bc565b9392505050565b600060208284031215611a5357600080fd5b5035919050565b600080600060408486031215611a6f57600080fd5b833567ffffffffffffffff811115611a8657600080fd5b611a92868287016118f3565b9094509250611aa590506020850161193c565b90509250925092565b600060208284031215611ac057600080fd5b8135611a3a816118ce565b600080600080600080600060c0888a031215611ae657600080fd5b873596506020880135611af8816118ce565b95506040880135611b08816118ce565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611b3257600080fd5b611b3e8a828b016118f3565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611bec60c083018486611b51565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611c29608083018688611b51565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611c5a57600080fd5b8251611c65816118ce565b602084015190925060ff81168114611c7c57600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611cdd57611cdd611c87565b02949350505050565b600067ffffffffffffffff80841680611d28577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611d5757611d57611c87565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611da157611da1611c87565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611de560608301846119bc565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611e2760808301856119bc565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611e8360c08301846119bc565b9897505050505050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000239565b600054600160a81b900460ff16158080156200004d57506000546001600160a01b90910460ff16105b806200008457506200006a306200017360201b6200162e1760201c565b158015620000845750600054600160a01b900460ff166001145b620000ed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011b576000805460ff60a81b1916600160a81b1790555b620001268262000182565b80156200016f576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e4565b60cc546001600160a01b0316620002175760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6120f280620002496000396000f3fe6080604052600436106101965760003560e01c80636e296e45116100e1578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610464578063d844471514610477578063db505d801461048c578063ecc70428146104b957600080fd5b8063b1b1b209146103f4578063b28ade2514610424578063c4d66de81461044457600080fd5b80639fce812c116100bb5780639fce812c14610399578063a4e7f8bd146103c4578063a71198691461039957600080fd5b80636e296e451461034857806383a74074146103825780638cbeeef21461029d57600080fd5b80634397dfef11610143578063550fcdc91161011d578063550fcdc9146103095780635644cfdf1461031e5780635c975abb1461033457600080fd5b80634397dfef1461025a5780634c1d6a691461029d57806354fd4d50146102b357600080fd5b80632828d7e8116101745780632828d7e8146102085780633dbb202b1461021d5780633f827a5a1461023257600080fd5b8063028f85f71461019b5780630c568498146101ce57806321326849146101e3575b600080fd5b3480156101a757600080fd5b506101b0601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101da57600080fd5b506101b0603f81565b3480156101ef57600080fd5b506101f861051e565b60405190151581526020016101c5565b34801561021457600080fd5b506101b0604081565b61023061022b366004611aa2565b61055d565b005b34801561023e57600080fd5b50610247600181565b60405161ffff90911681526020016101c5565b34801561026657600080fd5b5061026f61085a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101c5565b3480156102a957600080fd5b506101b0619c4081565b3480156102bf57600080fd5b506102fc6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101c59190611b83565b34801561031557600080fd5b506102fc6108e8565b34801561032a57600080fd5b506101b061138881565b34801561034057600080fd5b5060006101f8565b34801561035457600080fd5b5061035d610994565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c5565b34801561038e57600080fd5b506101b062030d4081565b3480156103a557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661035d565b3480156103d057600080fd5b506101f86103df366004611b9d565b60ce6020526000908152604090205460ff1681565b34801561040057600080fd5b506101f861040f366004611b9d565b60cb6020526000908152604090205460ff1681565b34801561043057600080fd5b506101b061043f366004611bb6565b610a7b565b34801561045057600080fd5b5061023061045f366004611c0a565b610ae9565b610230610472366004611c27565b610ce8565b34801561048357600080fd5b506102fc6115cd565b34801561049857600080fd5b5060cf5461035d9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104c557600080fd5b5061051060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101c5565b60008061052961085a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b61056561051e565b156105fd5734156105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf5461072f9073ffffffffffffffffffffffffffffffffffffffff16610625858585610a7b565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061069160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106ad9796959493929190611cf6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261164a565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856107b460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107c6959493929190611d55565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190611da3565b90939092509050565b606073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663550fcdc96040518163ffffffff1660e01b8152600401600060405180830381865afa158015610949573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261098f9190810190611e12565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610a5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105f4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610a97604063ffffffff8816611f0c565b610aa19190611f3c565b610aac601088611f0c565b610ab99062030d40611f8a565b610ac39190611f8a565b610acd9190611f8a565b610ad79190611f8a565b610ae19190611f8a565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610b34575060005460017401000000000000000000000000000000000000000090910460ff16105b80610b665750303b158015610b66575060005474010000000000000000000000000000000000000000900460ff166001145b610bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105f4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610c7857600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610c81826116d8565b8015610ce457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105f4565b8061ffff16600003610e98576000610df4878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611814915050565b600081815260cb602052604090205490915060ff1615610e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105f4565b505b6000610ede898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183392505050565b9050610f2760cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610f5f57853414610f3b57610f3b611fb6565b600081815260ce602052604090205460ff1615610f5a57610f5a611fb6565b6110b1565b3415611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105f4565b600081815260ce602052604090205460ff166110b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105f4565b6110ba87611856565b1561116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105f4565b600081815260cb602052604090205460ff161561120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105f4565b61122d8561121e611388619c40611f8a565b67ffffffffffffffff166118ab565b1580611253575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561136c57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105f4565b50506115c4565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113fd88619c405a6113c09190611fe5565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118c992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156114b357600082815260cb602052604090205460ff161561145057611450611fb6565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115c0565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105f4565b5050505b50505050505050565b606073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663d84447156040518163ffffffff1660e01b8152600401600060405180830381865afa158015610949573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac9084906116a090889088908790600401611ffc565b6000604051808303818588803b1580156116b957600080fd5b505af11580156116cd573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105f4565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117cd5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611822858585856118e3565b805190602001209050949350505050565b600061184387878787878761197c565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82163014806118a5575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016118fc9493929190612044565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60608686868686866040516024016119999695949392919061208e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611a3d57600080fd5b50565b60008083601f840112611a5257600080fd5b50813567ffffffffffffffff811115611a6a57600080fd5b602083019150836020828501011115611a8257600080fd5b9250929050565b803563ffffffff81168114611a9d57600080fd5b919050565b60008060008060608587031215611ab857600080fd5b8435611ac381611a1b565b9350602085013567ffffffffffffffff811115611adf57600080fd5b611aeb87828801611a40565b9094509250611afe905060408601611a89565b905092959194509250565b60005b83811015611b24578181015183820152602001611b0c565b83811115611b33576000848401525b50505050565b60008151808452611b51816020860160208601611b09565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b966020830184611b39565b9392505050565b600060208284031215611baf57600080fd5b5035919050565b600080600060408486031215611bcb57600080fd5b833567ffffffffffffffff811115611be257600080fd5b611bee86828701611a40565b9094509250611c01905060208501611a89565b90509250925092565b600060208284031215611c1c57600080fd5b8135611b9681611a1b565b600080600080600080600060c0888a031215611c4257600080fd5b873596506020880135611c5481611a1b565b95506040880135611c6481611a1b565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611c8e57600080fd5b611c9a8a828b01611a40565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611d4860c083018486611cad565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611d85608083018688611cad565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611db657600080fd5b8251611dc181611a1b565b602084015190925060ff81168114611dd857600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611e2457600080fd5b815167ffffffffffffffff80821115611e3c57600080fd5b818401915084601f830112611e5057600080fd5b815181811115611e6257611e62611de3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ea857611ea8611de3565b81604052828152876020848701011115611ec157600080fd5b611ed2836020830160208801611b09565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f3357611f33611edd565b02949350505050565b600067ffffffffffffffff80841680611f7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611fad57611fad611edd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611ff757611ff7611edd565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff8316602082015260606040820152600061203b6060830184611b39565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261207d6080830185611b39565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526120d960c0830184611b39565b9897505050505050505056fea164736f6c634300080f000a", } // L2CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -587,6 +587,99 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) GasPayingTok return _L2CrossDomainMessenger.Contract.GasPayingToken(&_L2CrossDomainMessenger.CallOpts) } +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenName") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) GasPayingTokenName() (string, error) { + return _L2CrossDomainMessenger.Contract.GasPayingTokenName(&_L2CrossDomainMessenger.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) GasPayingTokenName() (string, error) { + return _L2CrossDomainMessenger.Contract.GasPayingTokenName(&_L2CrossDomainMessenger.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenSymbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) GasPayingTokenSymbol() (string, error) { + return _L2CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_L2CrossDomainMessenger.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) GasPayingTokenSymbol() (string, error) { + return _L2CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_L2CrossDomainMessenger.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _L2CrossDomainMessenger.contract.Call(opts, &out, "isCustomGasToken") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) IsCustomGasToken() (bool, error) { + return _L2CrossDomainMessenger.Contract.IsCustomGasToken(&_L2CrossDomainMessenger.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) IsCustomGasToken() (bool, error) { + return _L2CrossDomainMessenger.Contract.IsCustomGasToken(&_L2CrossDomainMessenger.CallOpts) +} + // L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // // Solidity: function l1CrossDomainMessenger() view returns(address) @@ -825,27 +918,6 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorSession) Initiali return _L2CrossDomainMessenger.Contract.Initialize(&_L2CrossDomainMessenger.TransactOpts, _l1CrossDomainMessenger) } -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2CrossDomainMessenger.contract.Transact(opts, "isCustomGasToken") -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) IsCustomGasToken() (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.IsCustomGasToken(&_L2CrossDomainMessenger.TransactOpts) -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerTransactorSession) IsCustomGasToken() (*types.Transaction, error) { - return _L2CrossDomainMessenger.Contract.IsCustomGasToken(&_L2CrossDomainMessenger.TransactOpts) -} - // RelayMessage is a paid mutator transaction binding the contract method 0xd764ad0b. // // Solidity: function relayMessage(uint256 _nonce, address _sender, address _target, uint256 _value, uint256 _minGasLimit, bytes _message) payable returns() diff --git a/op-bindings/bindings/l2standardbridge.go b/op-bindings/bindings/l2standardbridge.go index aa722d80db0..90c3e52af19 100644 --- a/op-bindings/bindings/l2standardbridge.go +++ b/op-bindings/bindings/l2standardbridge.go @@ -30,8 +30,8 @@ var ( // L2StandardBridgeMetaData contains all meta data concerning the L2StandardBridge contract. var L2StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeDeposit\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_otherBridge\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdrawTo\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"DepositFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b620005171760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612d4580620002276000396000f3fe6080604052600436106101635760003560e01c80635c975abb116100c0578063927ede2d11610074578063c4d66de811610059578063c4d66de8146104b7578063c89701a2146104d7578063e11013dd1461050457600080fd5b8063927ede2d14610479578063a3a79548146104a457600080fd5b80637f46ddb2116100a55780637f46ddb2146102ba57806387087623146104135780638f601f661461043357600080fd5b80635c975abb146103ec578063662a633a1461040057600080fd5b806336c717c1116101175780634397dfef116100fc5780634397dfef14610333578063540abf731461037657806354fd4d501461039657600080fd5b806336c717c1146102ba5780633cb747bf1461030657600080fd5b80631635f5fd116101485780631635f5fd1461026a578063213268491461027d57806332b7006d146102a757600080fd5b80630166a07a1461023757806309fc88431461025757600080fd5b3661023257333b156101fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023073deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d4060405180602001604052806000815250610533565b005b600080fd5b34801561024357600080fd5b50610230610252366004612703565b61060e565b6102306102653660046127b4565b6109b0565b610230610278366004612807565b610a87565b34801561028957600080fd5b50610292610f6e565b60405190151581526020015b60405180910390f35b6102306102b536600461287a565b610fad565b3480156102c657600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161029e565b34801561031257600080fd5b506003546102e19073ffffffffffffffffffffffffffffffffffffffff1681565b34801561033f57600080fd5b50610348611087565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff90911660208301520161029e565b34801561038257600080fd5b506102306103913660046128ce565b611115565b3480156103a257600080fd5b506103df6040518060400160405280601b81526020017f312e392e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b60405161029e91906129bb565b3480156103f857600080fd5b506000610292565b61023061040e366004612703565b61115a565b34801561041f57600080fd5b5061023061042e3660046129ce565b6111cd565b34801561043f57600080fd5b5061046b61044e366004612a51565b600260209081526000928352604080842090915290825290205481565b60405190815260200161029e565b34801561048557600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102e1565b6102306104b23660046129ce565b6112a1565b3480156104c357600080fd5b506102306104d2366004612a8a565b6112e5565b3480156104e357600080fd5b506004546102e19073ffffffffffffffffffffffffffffffffffffffff1681565b610230610512366004612aa7565b61148e565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016105825761057d85858585856114d7565b610606565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f39190612b0a565b905061060487828888888888611736565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106e1575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106c99190612b0a565b73ffffffffffffffffffffffffffffffffffffffff16145b610793576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101f3565b61079c87611a61565b156108ea576107ab8787611ac3565b61085d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101f3565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108cd57600080fd5b505af11580156108e1573d6000803e3d6000fd5b5050505061096c565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610928908490612b56565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c168352939052919091209190915561096c908585611be3565b610604878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cb792505050565b333b15610a3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b610a823333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114d792505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b5a575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b429190612b0a565b73ffffffffffffffffffffffffffffffffffffffff16145b610c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101f3565b610c14610f6e565b15610ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e00000000000000000060648201526084016101f3565b823414610d30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101f3565b3073ffffffffffffffffffffffffffffffffffffffff851603610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101f3565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610e80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101f3565b610ec285858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d4592505050565b6000610edf855a8660405180602001604052806000815250611de6565b905080610606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101f3565b600080610f79611087565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b333b1561103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b611080853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061053392505050565b5050505050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa1580156110e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110c9190612b6d565b90939092509050565b61060487873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061173692505050565b73ffffffffffffffffffffffffffffffffffffffff87161580156111a7575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b156111be576111b98585858585610a87565b610604565b6106048688878787878761060e565b333b1561125c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101f3565b61060686863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061173692505050565b610606863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061053392505050565b600054610100900460ff16158080156113055750600054600160ff909116105b8061131f5750303b15801561131f575060005460ff166001145b6113ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101f3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561140957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61142773420000000000000000000000000000000000000783611e00565b801561148a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6114d13385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506114d792505050565b50505050565b6114df610f6e565b1561156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e00000000000000000060648201526084016101f3565b8234146115fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101f3565b61160785858584611eea565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd000000000000000000000000000000000000000000000000000000009061166a908b908b9086908a90602401612ba2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526116fd92918890600401612beb565b6000604051808303818588803b15801561171657600080fd5b505af115801561172a573d6000803e3d6000fd5b50505050505050505050565b61173f87611a61565b1561188d5761174e8787611ac3565b611800576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101f3565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561187057600080fd5b505af1158015611884573d6000803e3d6000fd5b50505050611921565b6118af73ffffffffffffffffffffffffffffffffffffffff8816863086611f8b565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546118ed908490612c30565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b61192f878787878786611fe9565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611993908b908d908c908c908c908b90602401612c48565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611a2692918790600401612beb565b600060405180830381600087803b158015611a4057600080fd5b505af1158015611a54573d6000803e3d6000fd5b5050505050505050505050565b6000611a8d827f1d1d8b6300000000000000000000000000000000000000000000000000000000612077565b80611abd5750611abd827fec4fc8e300000000000000000000000000000000000000000000000000000000612077565b92915050565b6000611aef837f1d1d8b6300000000000000000000000000000000000000000000000000000000612077565b15611b98578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b639190612b0a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611abd565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3f573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610a829084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261209a565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611d2f93929190612ca3565b60405180910390a46106068686868686866121a6565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611dd293929190612ca3565b60405180910390a46114d18484848461222e565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101f3565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611f7793929190612ca3565b60405180910390a46114d18484848461229b565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526114d19085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611c35565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e86868660405161206193929190612ca3565b60405180910390a46106068686868686866122fa565b600061208283612372565b8015612093575061209383836123d6565b9392505050565b60006120fc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124a59092919063ffffffff16565b805190915015610a82578080602001905181019061211a9190612ce1565b610a82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101f3565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161221e93929190612ca3565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161228d929190612d03565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161228d929190612d03565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161221e93929190612ca3565b600061239e827f01ffc9a7000000000000000000000000000000000000000000000000000000006123d6565b8015611abd57506123cf827fffffffff000000000000000000000000000000000000000000000000000000006123d6565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d9150600051905082801561248e575060208210155b801561249a5750600081115b979650505050505050565b60606124b484846000856124bc565b949350505050565b60608247101561254e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101f3565b73ffffffffffffffffffffffffffffffffffffffff85163b6125cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101f3565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125f59190612d1c565b60006040518083038185875af1925050503d8060008114612632576040519150601f19603f3d011682016040523d82523d6000602084013e612637565b606091505b509150915061249a82828660608315612651575081612093565b8251156126615782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f391906129bb565b73ffffffffffffffffffffffffffffffffffffffff811681146126b757600080fd5b50565b60008083601f8401126126cc57600080fd5b50813567ffffffffffffffff8111156126e457600080fd5b6020830191508360208285010111156126fc57600080fd5b9250929050565b600080600080600080600060c0888a03121561271e57600080fd5b873561272981612695565b9650602088013561273981612695565b9550604088013561274981612695565b9450606088013561275981612695565b93506080880135925060a088013567ffffffffffffffff81111561277c57600080fd5b6127888a828b016126ba565b989b979a50959850939692959293505050565b803563ffffffff811681146127af57600080fd5b919050565b6000806000604084860312156127c957600080fd5b6127d28461279b565b9250602084013567ffffffffffffffff8111156127ee57600080fd5b6127fa868287016126ba565b9497909650939450505050565b60008060008060006080868803121561281f57600080fd5b853561282a81612695565b9450602086013561283a81612695565b935060408601359250606086013567ffffffffffffffff81111561285d57600080fd5b612869888289016126ba565b969995985093965092949392505050565b60008060008060006080868803121561289257600080fd5b853561289d81612695565b9450602086013593506128b26040870161279b565b9250606086013567ffffffffffffffff81111561285d57600080fd5b600080600080600080600060c0888a0312156128e957600080fd5b87356128f481612695565b9650602088013561290481612695565b9550604088013561291481612695565b9450606088013593506129296080890161279b565b925060a088013567ffffffffffffffff81111561277c57600080fd5b60005b83811015612960578181015183820152602001612948565b838111156114d15750506000910152565b60008151808452612989816020860160208601612945565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006120936020830184612971565b60008060008060008060a087890312156129e757600080fd5b86356129f281612695565b95506020870135612a0281612695565b945060408701359350612a176060880161279b565b9250608087013567ffffffffffffffff811115612a3357600080fd5b612a3f89828a016126ba565b979a9699509497509295939492505050565b60008060408385031215612a6457600080fd5b8235612a6f81612695565b91506020830135612a7f81612695565b809150509250929050565b600060208284031215612a9c57600080fd5b813561209381612695565b60008060008060608587031215612abd57600080fd5b8435612ac881612695565b9350612ad66020860161279b565b9250604085013567ffffffffffffffff811115612af257600080fd5b612afe878288016126ba565b95989497509550505050565b600060208284031215612b1c57600080fd5b815161209381612695565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612b6857612b68612b27565b500390565b60008060408385031215612b8057600080fd5b8251612b8b81612695565b602084015190925060ff81168114612a7f57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612be16080830184612971565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612c1a6060830185612971565b905063ffffffff83166040830152949350505050565b60008219821115612c4357612c43612b27565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612c9760c0830184612971565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612cd86060830184612971565b95945050505050565b600060208284031215612cf357600080fd5b8151801515811461209357600080fd5b8281526040602082015260006124b46040830184612971565b60008251612d2e818460208701612945565b919091019291505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeDeposit\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_otherBridge\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdrawTo\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"DepositFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b620005571760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8180620002276000396000f3fe6080604052600436106101795760003560e01c80635c975abb116100cb578063927ede2d1161007f578063c89701a211610059578063c89701a214610502578063d84447151461052f578063e11013dd1461054457600080fd5b8063927ede2d146104a4578063a3a79548146104cf578063c4d66de8146104e257600080fd5b80637f46ddb2116100b05780637f46ddb2146102d0578063870876231461043e5780638f601f661461045e57600080fd5b80635c975abb14610417578063662a633a1461042b57600080fd5b806336c717c11161012d578063540abf7311610107578063540abf731461038c57806354fd4d50146103ac578063550fcdc91461040257600080fd5b806336c717c1146102d05780633cb747bf1461031c5780634397dfef1461034957600080fd5b80631635f5fd1161015e5780631635f5fd14610280578063213268491461029357806332b7006d146102bd57600080fd5b80630166a07a1461024d57806309fc88431461026d57600080fd5b3661024857333b15610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61024673deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d4060405180602001604052806000815250610573565b005b600080fd5b34801561025957600080fd5b50610246610268366004612850565b61064e565b61024661027b366004612901565b6109f0565b61024661028e366004612954565b610ac7565b34801561029f57600080fd5b506102a8610fae565b60405190151581526020015b60405180910390f35b6102466102cb3660046129c7565b610fed565b3480156102dc57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b4565b34801561032857600080fd5b506003546102f79073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035557600080fd5b5061035e6110c7565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102b4565b34801561039857600080fd5b506102466103a7366004612a1b565b611155565b3480156103b857600080fd5b506103f56040518060400160405280601b81526020017f312e392e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102b49190612b08565b34801561040e57600080fd5b506103f561119a565b34801561042357600080fd5b5060006102a8565b610246610439366004612850565b611246565b34801561044a57600080fd5b50610246610459366004612b1b565b6112b9565b34801561046a57600080fd5b50610496610479366004612b9e565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102b4565b3480156104b057600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102f7565b6102466104dd366004612b1b565b61138d565b3480156104ee57600080fd5b506102466104fd366004612bd7565b6113d1565b34801561050e57600080fd5b506004546102f79073ffffffffffffffffffffffffffffffffffffffff1681565b34801561053b57600080fd5b506103f561157a565b610246610552366004612bf4565b6115db565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016105c2576105bd8585858585611624565b610646565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106339190612c57565b905061064487828888888888611883565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610721575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107099190612c57565b73ffffffffffffffffffffffffffffffffffffffff16145b6107d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b6107dc87611bae565b1561092a576107eb8787611c10565b61089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050506109ac565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610968908490612ca3565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109ac908585611d30565b610644878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e0492505050565b333b15610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610ac23333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061162492505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b9a575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b829190612c57565b73ffffffffffffffffffffffffffffffffffffffff16145b610c4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b610c54610fae565b15610ce1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610209565b823414610d70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610209565b3073ffffffffffffffffffffffffffffffffffffffff851603610e15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610209565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610ec0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610209565b610f0285858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e9292505050565b6000610f1f855a8660405180602001604052806000815250611f33565b905080610646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610209565b600080610fb96110c7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b333b1561107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b6110c0853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061057392505050565b5050505050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190612cba565b90939092509050565b61064487873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061188392505050565b606073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663550fcdc96040518163ffffffff1660e01b8152600401600060405180830381865afa1580156111fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112419190810190612d1e565b905090565b73ffffffffffffffffffffffffffffffffffffffff8716158015611293575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b156112aa576112a58585858585610ac7565b610644565b6106448688878787878761064e565b333b15611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b61064686863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061188392505050565b610646863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061057392505050565b600054610100900460ff16158080156113f15750600054600160ff909116105b8061140b5750303b15801561140b575060005460ff166001145b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610209565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156114f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61151373420000000000000000000000000000000000000783611f4d565b801561157657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b606073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663d84447156040518163ffffffff1660e01b8152600401600060405180830381865afa1580156111fb573d6000803e3d6000fd5b61161e3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061162492505050565b50505050565b61162c610fae565b156116b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610209565b823414611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610209565b61175485858584612037565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117b7908b908b9086908a90602401612dde565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261184a92918890600401612e27565b6000604051808303818588803b15801561186357600080fd5b505af1158015611877573d6000803e3d6000fd5b50505050505050505050565b61188c87611bae565b156119da5761189b8787611c10565b61194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b1580156119bd57600080fd5b505af11580156119d1573d6000803e3d6000fd5b50505050611a6e565b6119fc73ffffffffffffffffffffffffffffffffffffffff88168630866120d8565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611a3a908490612e6c565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611a7c878787878786612136565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611ae0908b908d908c908c908c908b90602401612e84565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611b7392918790600401612e27565b600060405180830381600087803b158015611b8d57600080fd5b505af1158015611ba1573d6000803e3d6000fd5b5050505050505050505050565b6000611bda827f1d1d8b63000000000000000000000000000000000000000000000000000000006121c4565b80611c0a5750611c0a827fec4fc8e3000000000000000000000000000000000000000000000000000000006121c4565b92915050565b6000611c3c837f1d1d8b63000000000000000000000000000000000000000000000000000000006121c4565b15611ce5578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb09190612c57565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611c0a565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8c573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610ac29084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526121e7565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611e7c93929190612edf565b60405180910390a46106468686868686866122f3565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611f1f93929190612edf565b60405180910390a461161e8484848461237b565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610209565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8686866040516120c493929190612edf565b60405180910390a461161e848484846123e8565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261161e9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d82565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8686866040516121ae93929190612edf565b60405180910390a4610646868686868686612447565b60006121cf836124bf565b80156121e057506121e08383612523565b9392505050565b6000612249826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166125f29092919063ffffffff16565b805190915015610ac257808060200190518101906122679190612f1d565b610ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610209565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161236b93929190612edf565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123da929190612f3f565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123da929190612f3f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161236b93929190612edf565b60006124eb827f01ffc9a700000000000000000000000000000000000000000000000000000000612523565b8015611c0a575061251c827fffffffff00000000000000000000000000000000000000000000000000000000612523565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156125db575060208210155b80156125e75750600081115b979650505050505050565b60606126018484600085612609565b949350505050565b60608247101561269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610209565b73ffffffffffffffffffffffffffffffffffffffff85163b612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610209565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127429190612f58565b60006040518083038185875af1925050503d806000811461277f576040519150601f19603f3d011682016040523d82523d6000602084013e612784565b606091505b50915091506125e78282866060831561279e5750816121e0565b8251156127ae5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102099190612b08565b73ffffffffffffffffffffffffffffffffffffffff8116811461280457600080fd5b50565b60008083601f84011261281957600080fd5b50813567ffffffffffffffff81111561283157600080fd5b60208301915083602082850101111561284957600080fd5b9250929050565b600080600080600080600060c0888a03121561286b57600080fd5b8735612876816127e2565b96506020880135612886816127e2565b95506040880135612896816127e2565b945060608801356128a6816127e2565b93506080880135925060a088013567ffffffffffffffff8111156128c957600080fd5b6128d58a828b01612807565b989b979a50959850939692959293505050565b803563ffffffff811681146128fc57600080fd5b919050565b60008060006040848603121561291657600080fd5b61291f846128e8565b9250602084013567ffffffffffffffff81111561293b57600080fd5b61294786828701612807565b9497909650939450505050565b60008060008060006080868803121561296c57600080fd5b8535612977816127e2565b94506020860135612987816127e2565b935060408601359250606086013567ffffffffffffffff8111156129aa57600080fd5b6129b688828901612807565b969995985093965092949392505050565b6000806000806000608086880312156129df57600080fd5b85356129ea816127e2565b9450602086013593506129ff604087016128e8565b9250606086013567ffffffffffffffff8111156129aa57600080fd5b600080600080600080600060c0888a031215612a3657600080fd5b8735612a41816127e2565b96506020880135612a51816127e2565b95506040880135612a61816127e2565b945060608801359350612a76608089016128e8565b925060a088013567ffffffffffffffff8111156128c957600080fd5b60005b83811015612aad578181015183820152602001612a95565b8381111561161e5750506000910152565b60008151808452612ad6816020860160208601612a92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121e06020830184612abe565b60008060008060008060a08789031215612b3457600080fd5b8635612b3f816127e2565b95506020870135612b4f816127e2565b945060408701359350612b64606088016128e8565b9250608087013567ffffffffffffffff811115612b8057600080fd5b612b8c89828a01612807565b979a9699509497509295939492505050565b60008060408385031215612bb157600080fd5b8235612bbc816127e2565b91506020830135612bcc816127e2565b809150509250929050565b600060208284031215612be957600080fd5b81356121e0816127e2565b60008060008060608587031215612c0a57600080fd5b8435612c15816127e2565b9350612c23602086016128e8565b9250604085013567ffffffffffffffff811115612c3f57600080fd5b612c4b87828801612807565b95989497509550505050565b600060208284031215612c6957600080fd5b81516121e0816127e2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612cb557612cb5612c74565b500390565b60008060408385031215612ccd57600080fd5b8251612cd8816127e2565b602084015190925060ff81168114612bcc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612d3057600080fd5b815167ffffffffffffffff80821115612d4857600080fd5b818401915084601f830112612d5c57600080fd5b815181811115612d6e57612d6e612cef565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612db457612db4612cef565b81604052828152876020848701011115612dcd57600080fd5b6125e7836020830160208801612a92565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e1d6080830184612abe565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e566060830185612abe565b905063ffffffff83166040830152949350505050565b60008219821115612e7f57612e7f612c74565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612ed360c0830184612abe565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612f146060830184612abe565b95945050505050565b600060208284031215612f2f57600080fd5b815180151581146121e057600080fd5b8281526040602082015260006126016040830184612abe565b60008251612f6a818460208701612a92565b919091019291505056fea164736f6c634300080f000a", } // L2StandardBridgeABI is the input ABI used to generate the binding from. @@ -339,6 +339,99 @@ func (_L2StandardBridge *L2StandardBridgeCallerSession) GasPayingToken() (struct return _L2StandardBridge.Contract.GasPayingToken(&_L2StandardBridge.CallOpts) } +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L2StandardBridge *L2StandardBridgeCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "gasPayingTokenName") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L2StandardBridge *L2StandardBridgeSession) GasPayingTokenName() (string, error) { + return _L2StandardBridge.Contract.GasPayingTokenName(&_L2StandardBridge.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string name_) +func (_L2StandardBridge *L2StandardBridgeCallerSession) GasPayingTokenName() (string, error) { + return _L2StandardBridge.Contract.GasPayingTokenName(&_L2StandardBridge.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L2StandardBridge *L2StandardBridgeCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "gasPayingTokenSymbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L2StandardBridge *L2StandardBridgeSession) GasPayingTokenSymbol() (string, error) { + return _L2StandardBridge.Contract.GasPayingTokenSymbol(&_L2StandardBridge.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) +func (_L2StandardBridge *L2StandardBridgeCallerSession) GasPayingTokenSymbol() (string, error) { + return _L2StandardBridge.Contract.GasPayingTokenSymbol(&_L2StandardBridge.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L2StandardBridge *L2StandardBridgeCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _L2StandardBridge.contract.Call(opts, &out, "isCustomGasToken") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L2StandardBridge *L2StandardBridgeSession) IsCustomGasToken() (bool, error) { + return _L2StandardBridge.Contract.IsCustomGasToken(&_L2StandardBridge.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_L2StandardBridge *L2StandardBridgeCallerSession) IsCustomGasToken() (bool, error) { + return _L2StandardBridge.Contract.IsCustomGasToken(&_L2StandardBridge.CallOpts) +} + // L1TokenBridge is a free data retrieval call binding the contract method 0x36c717c1. // // Solidity: function l1TokenBridge() view returns(address) @@ -662,27 +755,6 @@ func (_L2StandardBridge *L2StandardBridgeTransactorSession) Initialize(_otherBri return _L2StandardBridge.Contract.Initialize(&_L2StandardBridge.TransactOpts, _otherBridge) } -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L2StandardBridge *L2StandardBridgeTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2StandardBridge.contract.Transact(opts, "isCustomGasToken") -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L2StandardBridge *L2StandardBridgeSession) IsCustomGasToken() (*types.Transaction, error) { - return _L2StandardBridge.Contract.IsCustomGasToken(&_L2StandardBridge.TransactOpts) -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_L2StandardBridge *L2StandardBridgeTransactorSession) IsCustomGasToken() (*types.Transaction, error) { - return _L2StandardBridge.Contract.IsCustomGasToken(&_L2StandardBridge.TransactOpts) -} - // Withdraw is a paid mutator transaction binding the contract method 0x32b7006d. // // Solidity: function withdraw(address _l2Token, uint256 _amount, uint32 _minGasLimit, bytes _extraData) payable returns() diff --git a/op-bindings/bindings/standardbridge.go b/op-bindings/bindings/standardbridge.go index d7e1c959c18..4650e46d811 100644 --- a/op-bindings/bindings/standardbridge.go +++ b/op-bindings/bindings/standardbridge.go @@ -30,7 +30,7 @@ var ( // StandardBridgeMetaData contains all meta data concerning the StandardBridge contract. var StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", } // StandardBridgeABI is the input ABI used to generate the binding from. @@ -272,6 +272,131 @@ func (_StandardBridge *StandardBridgeCallerSession) Deposits(arg0 common.Address return _StandardBridge.Contract.Deposits(&_StandardBridge.CallOpts, arg0, arg1) } +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address, uint8) +func (_StandardBridge *StandardBridgeCaller) GasPayingToken(opts *bind.CallOpts) (common.Address, uint8, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "gasPayingToken") + + if err != nil { + return *new(common.Address), *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out1 := *abi.ConvertType(out[1], new(uint8)).(*uint8) + + return out0, out1, err + +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address, uint8) +func (_StandardBridge *StandardBridgeSession) GasPayingToken() (common.Address, uint8, error) { + return _StandardBridge.Contract.GasPayingToken(&_StandardBridge.CallOpts) +} + +// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. +// +// Solidity: function gasPayingToken() view returns(address, uint8) +func (_StandardBridge *StandardBridgeCallerSession) GasPayingToken() (common.Address, uint8, error) { + return _StandardBridge.Contract.GasPayingToken(&_StandardBridge.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string) +func (_StandardBridge *StandardBridgeCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "gasPayingTokenName") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string) +func (_StandardBridge *StandardBridgeSession) GasPayingTokenName() (string, error) { + return _StandardBridge.Contract.GasPayingTokenName(&_StandardBridge.CallOpts) +} + +// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. +// +// Solidity: function gasPayingTokenName() view returns(string) +func (_StandardBridge *StandardBridgeCallerSession) GasPayingTokenName() (string, error) { + return _StandardBridge.Contract.GasPayingTokenName(&_StandardBridge.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string) +func (_StandardBridge *StandardBridgeCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "gasPayingTokenSymbol") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string) +func (_StandardBridge *StandardBridgeSession) GasPayingTokenSymbol() (string, error) { + return _StandardBridge.Contract.GasPayingTokenSymbol(&_StandardBridge.CallOpts) +} + +// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. +// +// Solidity: function gasPayingTokenSymbol() view returns(string) +func (_StandardBridge *StandardBridgeCallerSession) GasPayingTokenSymbol() (string, error) { + return _StandardBridge.Contract.GasPayingTokenSymbol(&_StandardBridge.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_StandardBridge *StandardBridgeCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _StandardBridge.contract.Call(opts, &out, "isCustomGasToken") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_StandardBridge *StandardBridgeSession) IsCustomGasToken() (bool, error) { + return _StandardBridge.Contract.IsCustomGasToken(&_StandardBridge.CallOpts) +} + +// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. +// +// Solidity: function isCustomGasToken() view returns(bool) +func (_StandardBridge *StandardBridgeCallerSession) IsCustomGasToken() (bool, error) { + return _StandardBridge.Contract.IsCustomGasToken(&_StandardBridge.CallOpts) +} + // Messenger is a free data retrieval call binding the contract method 0x3cb747bf. // // Solidity: function messenger() view returns(address) @@ -491,48 +616,6 @@ func (_StandardBridge *StandardBridgeTransactorSession) FinalizeBridgeETH(_from return _StandardBridge.Contract.FinalizeBridgeETH(&_StandardBridge.TransactOpts, _from, _to, _amount, _extraData) } -// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() returns(address, uint8) -func (_StandardBridge *StandardBridgeTransactor) GasPayingToken(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StandardBridge.contract.Transact(opts, "gasPayingToken") -} - -// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() returns(address, uint8) -func (_StandardBridge *StandardBridgeSession) GasPayingToken() (*types.Transaction, error) { - return _StandardBridge.Contract.GasPayingToken(&_StandardBridge.TransactOpts) -} - -// GasPayingToken is a paid mutator transaction binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() returns(address, uint8) -func (_StandardBridge *StandardBridgeTransactorSession) GasPayingToken() (*types.Transaction, error) { - return _StandardBridge.Contract.GasPayingToken(&_StandardBridge.TransactOpts) -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_StandardBridge *StandardBridgeTransactor) IsCustomGasToken(opts *bind.TransactOpts) (*types.Transaction, error) { - return _StandardBridge.contract.Transact(opts, "isCustomGasToken") -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_StandardBridge *StandardBridgeSession) IsCustomGasToken() (*types.Transaction, error) { - return _StandardBridge.Contract.IsCustomGasToken(&_StandardBridge.TransactOpts) -} - -// IsCustomGasToken is a paid mutator transaction binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() returns(bool) -func (_StandardBridge *StandardBridgeTransactorSession) IsCustomGasToken() (*types.Transaction, error) { - return _StandardBridge.Contract.IsCustomGasToken(&_StandardBridge.TransactOpts) -} - // Receive is a paid mutator transaction binding the contract receive function. // // Solidity: receive() payable returns() diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 59b26af2fd2..47d2080328b 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,16 +16,16 @@ "sourceCodeHash": "0xc59b8574531162e016d7342aeb6e79d05574e90dbea6c0e5ede35b65010ad894" }, "src/L1/L1CrossDomainMessenger.sol": { - "initCodeHash": "0xb2e15eaa5af5e84097416ccd85233fe3af8d2f0a5de44d8cf9b42d98d7297a03", - "sourceCodeHash": "0x91a48b1e5b84241e52465b936d721e37387b9410dcedb4d846db79289e80d837" + "initCodeHash": "0x5c85913a45901e45998af2409d3636d9a96cd0a9d012dfca8ddf56b425b95a42", + "sourceCodeHash": "0x52e8993798b3a9c9022c31beec90a8f133cc19369330170bc2a45c690c857bc5" }, "src/L1/L1ERC721Bridge.sol": { "initCodeHash": "0xec73b46e68ea29298707f7b9709e7948afe303907b6c4e8b161e2ded2c85ee9c", "sourceCodeHash": "0xd57acdbd001941e75cf4326ba7c1bdad809912f10b1e44ffaebe073917cdd296" }, "src/L1/L1StandardBridge.sol": { - "initCodeHash": "0x2db8c1208d5a779876ff9685dae8236fe5e7b6bbe6bcce2207ca7c7c24b54fba", - "sourceCodeHash": "0xadd45eccc0113d978ddf85b27d1ee800789812586fb3a3d22f52082debaf9325" + "initCodeHash": "0x0036830ffeea9d74cc106bc9354d69db730e97b8cfcae5ae8cc64ba42b7aed27", + "sourceCodeHash": "0xb6e0f79eaf164e0993be78a4f9b4499112dd7cd452f1ccee9340f3030e322310" }, "src/L1/L2OutputOracle.sol": { "initCodeHash": "0x14c3a582ca46ef2a6abad5590323f4de26ff4de54415c927c62e131ccbf8d9ba", @@ -49,7 +49,7 @@ }, "src/L1/SystemConfig.sol": { "initCodeHash": "0x998884f4420c3bbfa79f809c0ae3a106e160dbdce45d9674b60c70d16c36087f", - "sourceCodeHash": "0xc73fde7dcaa18b391283f25910ba0188ed3d030966de5bd0773c694e93c78d32" + "sourceCodeHash": "0x5e851492c6c39974123f7b6514466288868f68ec1a97ba7ee90256467caf15a7" }, "src/L2/BaseFeeVault.sol": { "initCodeHash": "0x2744d34573be83206d1b75d049d18a7bb37f9058e68c0803e5008c46b0dc2474", @@ -65,7 +65,7 @@ }, "src/L2/L1Block.sol": { "initCodeHash": "0x6203eea328565c2dff822ce3d5fd0f3cf0aaba214b8e19e319ceca728f731d57", - "sourceCodeHash": "0xa65847a37654347237402e46d8c15afa82cd61d826547bc0f272e2c1b477ea7f" + "sourceCodeHash": "0x9a3b09dd199b1294db9efcc7243f514111563cf0d5681fbaa216b6f0f0b27bd1" }, "src/L2/L1BlockInterop.sol": { "initCodeHash": "0xa195d3d0fc6cd8259a512c638c8e46aec1c01c24a46e6b695c47fdf66b1c3fda", @@ -76,16 +76,16 @@ "sourceCodeHash": "0x3a94f273937d8908fb37dd2c495a6a0b9c3941fe68ccea51723f84eb343ba225" }, "src/L2/L2CrossDomainMessenger.sol": { - "initCodeHash": "0x5af579fbebc8ef1a0437064e97714670305697f164fc8bed2b7beddec18a53f3", - "sourceCodeHash": "0x2cef6c7d184ad1f1ec207827a259d09c241ad8f14f887f42c3d92c2f0d478f6e" + "initCodeHash": "0x6fca9d0d1c87fea38db1c2d266bb5acd4a7a014abaaa5ff95e31bb5589ef42f3", + "sourceCodeHash": "0xd829462f5e35db4e593334bdc53941293213b3fad8d399ed8b20bc031fd3aab8" }, "src/L2/L2ERC721Bridge.sol": { "initCodeHash": "0xcafa012b2d8f1bb05c11cbbff9749c0fe6f995c9afb1d26d2d71f03384e34a22", "sourceCodeHash": "0xa7646a588275046f92525ef121e5a0fe149e7752ea51fe62f7e0686a21153542" }, "src/L2/L2StandardBridge.sol": { - "initCodeHash": "0x0c3541144b66cced2be908417bcd18f4b2f0d68b31a8788a420e7f3eebede737", - "sourceCodeHash": "0x02581ef6db3531c87e683f3c46060a9189f1c905e458821dcf5d328c09f48012" + "initCodeHash": "0x73f9c70c264947f6d963b8be6901f84cc4fb1b191e0fed6836d401df556ef145", + "sourceCodeHash": "0x78b0cbd013d8547be1a1741ed5b5a0462c3b5fa67f978b962843d990cd74e1be" }, "src/L2/L2ToL1MessagePasser.sol": { "initCodeHash": "0x08bbede75cd6dfd076903b8f04d24f82fa7881576c135825098778632e37eebc", diff --git a/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json b/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json index 30c68fbaf94..aa17e1f1d10 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json +++ b/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json @@ -195,6 +195,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "gasPayingTokenName", + "outputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasPayingTokenSymbol", + "outputs": [ + { + "internalType": "string", + "name": "symbol_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -228,7 +254,7 @@ "type": "bool" } ], - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { diff --git a/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json b/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json index a7bffd19e9d..8bb12b4d7f7 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json +++ b/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json @@ -432,6 +432,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "gasPayingTokenName", + "outputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasPayingTokenSymbol", + "outputs": [ + { + "internalType": "string", + "name": "symbol_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -465,7 +491,7 @@ "type": "bool" } ], - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { diff --git a/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json b/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json index 3dce9655fb8..4982be60e95 100644 --- a/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json +++ b/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json @@ -182,6 +182,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "gasPayingTokenName", + "outputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasPayingTokenSymbol", + "outputs": [ + { + "internalType": "string", + "name": "symbol_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -205,7 +231,7 @@ "type": "bool" } ], - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { diff --git a/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json b/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json index 03c74a86b1a..c37207cc54e 100644 --- a/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json +++ b/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json @@ -292,6 +292,32 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "gasPayingTokenName", + "outputs": [ + { + "internalType": "string", + "name": "name_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "gasPayingTokenSymbol", + "outputs": [ + { + "internalType": "string", + "name": "symbol_", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -315,7 +341,7 @@ "type": "bool" } ], - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json index e8e88cf474d..f40a6d87081 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json @@ -3707,7 +3707,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620018671760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612471806200029e6000396000f3fe6080604052600436106101b75760003560e01c80635c975abb116100ec578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610534578063d844471514610547578063db505d801461055c578063ecc704281461058957600080fd5b8063b1b1b209146104c4578063b28ade25146104f4578063c0c53b8b1461051457600080fd5b806383a74074116100c657806383a74074146104525780638cbeeef2146103645780639fce812c14610469578063a4e7f8bd1461049457600080fd5b80635c975abb146103fb5780636425666b146104105780636e296e451461043d57600080fd5b80633dbb202b116101595780634c1d6a69116101335780634c1d6a691461036457806354fd4d501461037a578063550fcdc9146103d05780635644cfdf146103e557600080fd5b80633dbb202b146102e45780633f827a5a146102f95780634397dfef1461032157600080fd5b8063213268491161019557806321326849146102505780632828d7e81461027557806333d7e2bd1461028a57806335e80ab3146102b757600080fd5b8063028f85f7146101bc5780630c568498146101ef5780630ff754ea14610204575b600080fd5b3480156101c857600080fd5b506101d1601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506101d1603f81565b34801561021057600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b34801561025c57600080fd5b506102656105ee565b60405190151581526020016101e6565b34801561028157600080fd5b506101d1604081565b34801561029657600080fd5b5060fd5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102c357600080fd5b5060fb5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f76102f2366004611db3565b61062d565b005b34801561030557600080fd5b5061030e600181565b60405161ffff90911681526020016101e6565b34801561032d57600080fd5b5061033661092a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101e6565b34801561037057600080fd5b506101d1619c4081565b34801561038657600080fd5b506103c36040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101e69190611e90565b3480156103dc57600080fd5b506103c36109c7565b3480156103f157600080fd5b506101d161138881565b34801561040757600080fd5b50610265610a82565b34801561041c57600080fd5b5060fc5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044957600080fd5b5061022b610b16565b34801561045e57600080fd5b506101d162030d4081565b34801561047557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661022b565b3480156104a057600080fd5b506102656104af366004611eaa565b60ce6020526000908152604090205460ff1681565b3480156104d057600080fd5b506102656104df366004611eaa565b60cb6020526000908152604090205460ff1681565b34801561050057600080fd5b506101d161050f366004611ec3565b610bfd565b34801561052057600080fd5b506102f761052f366004611f17565b610c6b565b6102f7610542366004611f62565b610ee2565b34801561055357600080fd5b506103c36117f7565b34801561056857600080fd5b5060cf5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059557600080fd5b506105e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101e6565b6000806105f961092a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6106356105ee565b156106cd5734156106cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107ff9073ffffffffffffffffffffffffffffffffffffffff166106f5858585610bfd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061076160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161077d9796959493929190612031565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611883565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561088460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610896959493929190612090565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906120de565b90939092509050565b60fd54604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7d919081019061214d565b905090565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612218565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016106c4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610c19604063ffffffff8816612269565b610c239190612299565b610c2e601088612269565b610c3b9062030d406122e7565b610c4591906122e7565b610c4f91906122e7565b610c5991906122e7565b610c6391906122e7565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610cb6575060005460017401000000000000000000000000000000000000000090910460ff16105b80610ce85750303b158015610ce8575060005474010000000000000000000000000000000000000000900460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106c4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610dfa57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610e7973420000000000000000000000000000000000000761191c565b8015610edc57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610eea610a82565b15610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016106c4565b60f087901c6002811061100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016106c4565b8061ffff1660000361110157600061105d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611a58915050565b600081815260cb602052604090205490915060ff16156110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016106c4565b505b6000611147898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7792505050565b9050611151611a9a565b156111895785341461116557611165612313565b600081815260ce602052604090205460ff161561118457611184612313565b6112db565b341561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016106c4565b600081815260ce602052604090205460ff166112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016106c4565b6112e487611b76565b15611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016106c4565b600081815260cb602052604090205460ff1615611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016106c4565b61145785611448611388619c406122e7565b67ffffffffffffffff16611bbc565b158061147d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561159657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b50506117ee565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061162788619c405a6115ea9190612342565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bda92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156116dd57600082815260cb602052604090205460ff161561167a5761167a612313565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26117ea565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b5050505b50505050505050565b60fd54604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906118e4908890839089906000908990600401612359565b6000604051808303818588803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106c4565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611a115760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a6685858585611bf4565b805190602001209050949350505050565b6000611a87878787878787611c8d565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a7d575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a91906123a6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611bb6575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611c0d94939291906123c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611caa9695949392919061240d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d4e57600080fd5b50565b60008083601f840112611d6357600080fd5b50813567ffffffffffffffff811115611d7b57600080fd5b602083019150836020828501011115611d9357600080fd5b9250929050565b803563ffffffff81168114611dae57600080fd5b919050565b60008060008060608587031215611dc957600080fd5b8435611dd481611d2c565b9350602085013567ffffffffffffffff811115611df057600080fd5b611dfc87828801611d51565b9094509250611e0f905060408601611d9a565b905092959194509250565b60005b83811015611e35578181015183820152602001611e1d565b83811115610edc5750506000910152565b60008151808452611e5e816020860160208601611e1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ea36020830184611e46565b9392505050565b600060208284031215611ebc57600080fd5b5035919050565b600080600060408486031215611ed857600080fd5b833567ffffffffffffffff811115611eef57600080fd5b611efb86828701611d51565b9094509250611f0e905060208501611d9a565b90509250925092565b600080600060608486031215611f2c57600080fd5b8335611f3781611d2c565b92506020840135611f4781611d2c565b91506040840135611f5781611d2c565b809150509250925092565b600080600080600080600060c0888a031215611f7d57600080fd5b873596506020880135611f8f81611d2c565b95506040880135611f9f81611d2c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611fc957600080fd5b611fd58a828b01611d51565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261208360c083018486611fe8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c0608083018688611fe8565b905083604083015263ffffffff831660608301529695505050505050565b600080604083850312156120f157600080fd5b82516120fc81611d2c565b602084015190925060ff8116811461211357600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561215f57600080fd5b815167ffffffffffffffff8082111561217757600080fd5b818401915084601f83011261218b57600080fd5b81518181111561219d5761219d61211e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e361211e565b816040528281528760208487010111156121fc57600080fd5b61220d836020830160208801611e1a565b979650505050505050565b60006020828403121561222a57600080fd5b81518015158114611ea357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156122905761229061223a565b02949350505050565b600067ffffffffffffffff808416806122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561230a5761230a61223a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156123545761235461223a565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061220d60a0830184611e46565b6000602082840312156123b857600080fd5b8151611ea381611d2c565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526123fc6080830185611e46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261245860c0830184611e46565b9897505050505050505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3719,13 +3719,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620017011760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612211806200029e6000396000f3fe6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620018671760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612471806200029e6000396000f3fe6080604052600436106101b75760003560e01c80635c975abb116100ec578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610534578063d844471514610547578063db505d801461055c578063ecc704281461058957600080fd5b8063b1b1b209146104c4578063b28ade25146104f4578063c0c53b8b1461051457600080fd5b806383a74074116100c657806383a74074146104525780638cbeeef2146103645780639fce812c14610469578063a4e7f8bd1461049457600080fd5b80635c975abb146103fb5780636425666b146104105780636e296e451461043d57600080fd5b80633dbb202b116101595780634c1d6a69116101335780634c1d6a691461036457806354fd4d501461037a578063550fcdc9146103d05780635644cfdf146103e557600080fd5b80633dbb202b146102e45780633f827a5a146102f95780634397dfef1461032157600080fd5b8063213268491161019557806321326849146102505780632828d7e81461027557806333d7e2bd1461028a57806335e80ab3146102b757600080fd5b8063028f85f7146101bc5780630c568498146101ef5780630ff754ea14610204575b600080fd5b3480156101c857600080fd5b506101d1601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506101d1603f81565b34801561021057600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b34801561025c57600080fd5b506102656105ee565b60405190151581526020016101e6565b34801561028157600080fd5b506101d1604081565b34801561029657600080fd5b5060fd5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102c357600080fd5b5060fb5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f76102f2366004611db3565b61062d565b005b34801561030557600080fd5b5061030e600181565b60405161ffff90911681526020016101e6565b34801561032d57600080fd5b5061033661092a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101e6565b34801561037057600080fd5b506101d1619c4081565b34801561038657600080fd5b506103c36040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101e69190611e90565b3480156103dc57600080fd5b506103c36109c7565b3480156103f157600080fd5b506101d161138881565b34801561040757600080fd5b50610265610a82565b34801561041c57600080fd5b5060fc5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044957600080fd5b5061022b610b16565b34801561045e57600080fd5b506101d162030d4081565b34801561047557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661022b565b3480156104a057600080fd5b506102656104af366004611eaa565b60ce6020526000908152604090205460ff1681565b3480156104d057600080fd5b506102656104df366004611eaa565b60cb6020526000908152604090205460ff1681565b34801561050057600080fd5b506101d161050f366004611ec3565b610bfd565b34801561052057600080fd5b506102f761052f366004611f17565b610c6b565b6102f7610542366004611f62565b610ee2565b34801561055357600080fd5b506103c36117f7565b34801561056857600080fd5b5060cf5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059557600080fd5b506105e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101e6565b6000806105f961092a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6106356105ee565b156106cd5734156106cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107ff9073ffffffffffffffffffffffffffffffffffffffff166106f5858585610bfd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061076160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161077d9796959493929190612031565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611883565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561088460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610896959493929190612090565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906120de565b90939092509050565b60fd54604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7d919081019061214d565b905090565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612218565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016106c4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610c19604063ffffffff8816612269565b610c239190612299565b610c2e601088612269565b610c3b9062030d406122e7565b610c4591906122e7565b610c4f91906122e7565b610c5991906122e7565b610c6391906122e7565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610cb6575060005460017401000000000000000000000000000000000000000090910460ff16105b80610ce85750303b158015610ce8575060005474010000000000000000000000000000000000000000900460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106c4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610dfa57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610e7973420000000000000000000000000000000000000761191c565b8015610edc57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610eea610a82565b15610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016106c4565b60f087901c6002811061100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016106c4565b8061ffff1660000361110157600061105d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611a58915050565b600081815260cb602052604090205490915060ff16156110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016106c4565b505b6000611147898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7792505050565b9050611151611a9a565b156111895785341461116557611165612313565b600081815260ce602052604090205460ff161561118457611184612313565b6112db565b341561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016106c4565b600081815260ce602052604090205460ff166112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016106c4565b6112e487611b76565b15611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016106c4565b600081815260cb602052604090205460ff1615611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016106c4565b61145785611448611388619c406122e7565b67ffffffffffffffff16611bbc565b158061147d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561159657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b50506117ee565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061162788619c405a6115ea9190612342565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bda92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156116dd57600082815260cb602052604090205460ff161561167a5761167a612313565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26117ea565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b5050505b50505050505050565b60fd54604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906118e4908890839089906000908990600401612359565b6000604051808303818588803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106c4565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611a115760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a6685858585611bf4565b805190602001209050949350505050565b6000611a87878787878787611c8d565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a7d575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a91906123a6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611bb6575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611c0d94939291906123c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611caa9695949392919061240d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d4e57600080fd5b50565b60008083601f840112611d6357600080fd5b50813567ffffffffffffffff811115611d7b57600080fd5b602083019150836020828501011115611d9357600080fd5b9250929050565b803563ffffffff81168114611dae57600080fd5b919050565b60008060008060608587031215611dc957600080fd5b8435611dd481611d2c565b9350602085013567ffffffffffffffff811115611df057600080fd5b611dfc87828801611d51565b9094509250611e0f905060408601611d9a565b905092959194509250565b60005b83811015611e35578181015183820152602001611e1d565b83811115610edc5750506000910152565b60008151808452611e5e816020860160208601611e1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ea36020830184611e46565b9392505050565b600060208284031215611ebc57600080fd5b5035919050565b600080600060408486031215611ed857600080fd5b833567ffffffffffffffff811115611eef57600080fd5b611efb86828701611d51565b9094509250611f0e905060208501611d9a565b90509250925092565b600080600060608486031215611f2c57600080fd5b8335611f3781611d2c565b92506020840135611f4781611d2c565b91506040840135611f5781611d2c565b809150509250925092565b600080600080600080600060c0888a031215611f7d57600080fd5b873596506020880135611f8f81611d2c565b95506040880135611f9f81611d2c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611fc957600080fd5b611fd58a828b01611d51565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261208360c083018486611fe8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c0608083018688611fe8565b905083604083015263ffffffff831660608301529695505050505050565b600080604083850312156120f157600080fd5b82516120fc81611d2c565b602084015190925060ff8116811461211357600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561215f57600080fd5b815167ffffffffffffffff8082111561217757600080fd5b818401915084601f83011261218b57600080fd5b81518181111561219d5761219d61211e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e361211e565b816040528281528760208487010111156121fc57600080fd5b61220d836020830160208801611e1a565b979650505050505050565b60006020828403121561222a57600080fd5b81518015158114611ea357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156122905761229061223a565b02949350505050565b600067ffffffffffffffff808416806122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561230a5761230a61223a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156123545761235461223a565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061220d60a0830184611e46565b6000602082840312156123b857600080fd5b8151611ea381611d2c565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526123fc6080830185611e46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261245860c0830184611e46565b9897505050505050505056fea164736f6c634300080f000a", + "deployedCode": "0x6080604052600436106101b75760003560e01c80635c975abb116100ec578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610534578063d844471514610547578063db505d801461055c578063ecc704281461058957600080fd5b8063b1b1b209146104c4578063b28ade25146104f4578063c0c53b8b1461051457600080fd5b806383a74074116100c657806383a74074146104525780638cbeeef2146103645780639fce812c14610469578063a4e7f8bd1461049457600080fd5b80635c975abb146103fb5780636425666b146104105780636e296e451461043d57600080fd5b80633dbb202b116101595780634c1d6a69116101335780634c1d6a691461036457806354fd4d501461037a578063550fcdc9146103d05780635644cfdf146103e557600080fd5b80633dbb202b146102e45780633f827a5a146102f95780634397dfef1461032157600080fd5b8063213268491161019557806321326849146102505780632828d7e81461027557806333d7e2bd1461028a57806335e80ab3146102b757600080fd5b8063028f85f7146101bc5780630c568498146101ef5780630ff754ea14610204575b600080fd5b3480156101c857600080fd5b506101d1601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506101d1603f81565b34801561021057600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b34801561025c57600080fd5b506102656105ee565b60405190151581526020016101e6565b34801561028157600080fd5b506101d1604081565b34801561029657600080fd5b5060fd5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102c357600080fd5b5060fb5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f76102f2366004611db3565b61062d565b005b34801561030557600080fd5b5061030e600181565b60405161ffff90911681526020016101e6565b34801561032d57600080fd5b5061033661092a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101e6565b34801561037057600080fd5b506101d1619c4081565b34801561038657600080fd5b506103c36040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101e69190611e90565b3480156103dc57600080fd5b506103c36109c7565b3480156103f157600080fd5b506101d161138881565b34801561040757600080fd5b50610265610a82565b34801561041c57600080fd5b5060fc5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044957600080fd5b5061022b610b16565b34801561045e57600080fd5b506101d162030d4081565b34801561047557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661022b565b3480156104a057600080fd5b506102656104af366004611eaa565b60ce6020526000908152604090205460ff1681565b3480156104d057600080fd5b506102656104df366004611eaa565b60cb6020526000908152604090205460ff1681565b34801561050057600080fd5b506101d161050f366004611ec3565b610bfd565b34801561052057600080fd5b506102f761052f366004611f17565b610c6b565b6102f7610542366004611f62565b610ee2565b34801561055357600080fd5b506103c36117f7565b34801561056857600080fd5b5060cf5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059557600080fd5b506105e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101e6565b6000806105f961092a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6106356105ee565b156106cd5734156106cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107ff9073ffffffffffffffffffffffffffffffffffffffff166106f5858585610bfd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061076160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161077d9796959493929190612031565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611883565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561088460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610896959493929190612090565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906120de565b90939092509050565b60fd54604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7d919081019061214d565b905090565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612218565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016106c4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610c19604063ffffffff8816612269565b610c239190612299565b610c2e601088612269565b610c3b9062030d406122e7565b610c4591906122e7565b610c4f91906122e7565b610c5991906122e7565b610c6391906122e7565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610cb6575060005460017401000000000000000000000000000000000000000090910460ff16105b80610ce85750303b158015610ce8575060005474010000000000000000000000000000000000000000900460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106c4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610dfa57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610e7973420000000000000000000000000000000000000761191c565b8015610edc57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610eea610a82565b15610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016106c4565b60f087901c6002811061100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016106c4565b8061ffff1660000361110157600061105d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611a58915050565b600081815260cb602052604090205490915060ff16156110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016106c4565b505b6000611147898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7792505050565b9050611151611a9a565b156111895785341461116557611165612313565b600081815260ce602052604090205460ff161561118457611184612313565b6112db565b341561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016106c4565b600081815260ce602052604090205460ff166112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016106c4565b6112e487611b76565b15611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016106c4565b600081815260cb602052604090205460ff1615611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016106c4565b61145785611448611388619c406122e7565b67ffffffffffffffff16611bbc565b158061147d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561159657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b50506117ee565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061162788619c405a6115ea9190612342565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bda92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156116dd57600082815260cb602052604090205460ff161561167a5761167a612313565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26117ea565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b5050505b50505050505050565b60fd54604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906118e4908890839089906000908990600401612359565b6000604051808303818588803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106c4565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611a115760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a6685858585611bf4565b805190602001209050949350505050565b6000611a87878787878787611c8d565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a7d575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a91906123a6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611bb6575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611c0d94939291906123c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611caa9695949392919061240d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d4e57600080fd5b50565b60008083601f840112611d6357600080fd5b50813567ffffffffffffffff811115611d7b57600080fd5b602083019150836020828501011115611d9357600080fd5b9250929050565b803563ffffffff81168114611dae57600080fd5b919050565b60008060008060608587031215611dc957600080fd5b8435611dd481611d2c565b9350602085013567ffffffffffffffff811115611df057600080fd5b611dfc87828801611d51565b9094509250611e0f905060408601611d9a565b905092959194509250565b60005b83811015611e35578181015183820152602001611e1d565b83811115610edc5750506000910152565b60008151808452611e5e816020860160208601611e1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ea36020830184611e46565b9392505050565b600060208284031215611ebc57600080fd5b5035919050565b600080600060408486031215611ed857600080fd5b833567ffffffffffffffff811115611eef57600080fd5b611efb86828701611d51565b9094509250611f0e905060208501611d9a565b90509250925092565b600080600060608486031215611f2c57600080fd5b8335611f3781611d2c565b92506020840135611f4781611d2c565b91506040840135611f5781611d2c565b809150509250925092565b600080600080600080600060c0888a031215611f7d57600080fd5b873596506020880135611f8f81611d2c565b95506040880135611f9f81611d2c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611fc957600080fd5b611fd58a828b01611d51565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261208360c083018486611fe8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c0608083018688611fe8565b905083604083015263ffffffff831660608301529695505050505050565b600080604083850312156120f157600080fd5b82516120fc81611d2c565b602084015190925060ff8116811461211357600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561215f57600080fd5b815167ffffffffffffffff8082111561217757600080fd5b818401915084601f83011261218b57600080fd5b81518181111561219d5761219d61211e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e361211e565b816040528281528760208487010111156121fc57600080fd5b61220d836020830160208801611e1a565b979650505050505050565b60006020828403121561222a57600080fd5b81518015158114611ea357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156122905761229061223a565b02949350505050565b600067ffffffffffffffff808416806122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561230a5761230a61223a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156123545761235461223a565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061220d60a0830184611e46565b6000602082840312156123b857600080fd5b8151611ea381611d2c565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526123fc6080830185611e46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261245860c0830184611e46565b9897505050505050505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3733,7 +3733,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3741,7 +3741,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3749,7 +3749,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3757,7 +3757,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3765,7 +3765,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -3773,7 +3773,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": true, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -3781,7 +3781,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3789,7 +3789,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3797,7 +3797,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3805,7 +3805,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3813,7 +3813,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3821,7 +3821,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3829,7 +3829,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3837,7 +3837,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3845,7 +3845,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3853,7 +3853,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3861,7 +3861,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3869,7 +3869,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3877,7 +3877,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3885,7 +3885,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3914,7 +3914,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3928,7 +3928,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -3940,7 +3940,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3954,7 +3954,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -3966,7 +3966,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3980,7 +3980,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3992,7 +3992,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4006,7 +4006,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4018,7 +4018,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4032,7 +4032,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5373,7 +5373,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620006371760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6131e4806200025b6000396000f3fe6080604052600436106101b05760003560e01c80635c975abb116100ec5780639a2ac6d51161008a578063c0c53b8b11610064578063c0c53b8b146105c2578063c89701a2146105e2578063d84447151461060f578063e11013dd1461062457600080fd5b80639a2ac6d51461057c578063a9f9e6751461058f578063b1a1a882146105af57600080fd5b806387087623116100c657806387087623146104eb5780638f601f661461050b57806391c49bf8146104a0578063927ede2d1461055157600080fd5b80635c975abb1461048b5780637f46ddb2146104a0578063838b2520146104cb57600080fd5b806335e80ab311610159578063540abf7311610133578063540abf73146103e057806354fd4d5014610400578063550fcdc91461045657806358a997f61461046b57600080fd5b806335e80ab3146103435780633cb747bf146103705780634397dfef1461039d57600080fd5b80631635f5fd1161018a5780631635f5fd146102b457806321326849146102c757806333d7e2bd146102f157600080fd5b80630166a07a1461026e57806309fc88431461028e5780631532ec34146102a157600080fd5b3661026957333b15610249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610267333362030d4060405180602001604052806000815250610653565b005b600080fd5b34801561027a57600080fd5b50610267610289366004612ad9565b610666565b61026761029c366004612b8a565b610a80565b6102676102af366004612bdd565b610b57565b6102676102c2366004612bdd565b610b6b565b3480156102d357600080fd5b506102dc6110c9565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5060335461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e8565b34801561034f57600080fd5b5060325461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037c57600080fd5b5060035461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103b2611108565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102e8565b3480156103ec57600080fd5b506102676103fb366004612c50565b6111a5565b34801561040c57600080fd5b506104496040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e89190612d3d565b34801561046257600080fd5b506104496111ea565b34801561047757600080fd5b50610267610486366004612d50565b6112a5565b34801561049757600080fd5b506102dc611379565b3480156104ac57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661031e565b3480156104d757600080fd5b506102676104e6366004612c50565b61140d565b3480156104f757600080fd5b50610267610506366004612d50565b611452565b34801561051757600080fd5b50610543610526366004612dd3565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e8565b34801561055d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661031e565b61026761058a366004612e0c565b611526565b34801561059b57600080fd5b506102676105aa366004612ad9565b611568565b6102676105bd366004612b8a565b611577565b3480156105ce57600080fd5b506102676105dd366004612e6f565b611648565b3480156105ee57600080fd5b5060045461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061b57600080fd5b50610449611847565b610267610632366004612e0c565b6118b7565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61066084843485856118fa565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610739575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107219190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b6107eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b6107f3611379565b1561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b61086387611b59565b156109b1576108728787611bbb565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050610a33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109ef908490612f06565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a33908585611cdb565b610a77878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611daf92505050565b50505050505050565b333b15610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b523333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b505050565b610b648585858585610b6b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c3e575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b610cf8611379565b15610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b610d676110c9565b15610df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610240565b3073ffffffffffffffffffffffffffffffffffffffff851603610f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610240565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610240565b61101585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3d92505050565b6000611032855a8660405180602001604052806000815250611eb0565b9050806110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610240565b505050505050565b6000806110d4611108565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612f1d565b90939092509050565b610a7787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b603354604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112a09190810190612f81565b905090565b333b15611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613041565b610a7787873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b333b156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b61066033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b610a7787878787878787610666565b333b15611606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b5233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b600054610100900460ff16158080156116685750600054600160ff909116105b806116825750303b158015611682575060005460ff166001145b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610240565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561176c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556117df84734200000000000000000000000000000000000010612204565b801561066057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b603354604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b6106603385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b6119026110c9565b1561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610240565b611a2a858585846122ee565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a8d908b908b9086908a90602401613063565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b20929188906004016130ac565b6000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050505050505050565b6000611b85827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80611bb55750611bb5827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b92915050565b6000611be7837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611c90578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611bb5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b529084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612384565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611e27939291906130f1565b60405180910390a46110c1868686868686612490565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e9c92919061312f565b60405180910390a361066084848484612518565b600080600080845160208601878a8af19695505050505050565b611ed387611b59565b1561202157611ee28787611bbb565b611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506120b5565b61204373ffffffffffffffffffffffffffffffffffffffff8816863086612585565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054612081908490613148565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6120c38787878787866125e3565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090612127908b908d908c908c908c908b90602401613160565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526121ba929187906004016130ac565b600060405180830381600087803b1580156121d457600080fd5b505af11580156121e8573d6000803e3d6000fd5b5050505050505050505050565b610a7787878787878787611eca565b600054610100900460ff1661229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610240565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161234d92919061312f565b60405180910390a361066084848484612671565b600061236c836126d0565b801561237d575061237d8383612734565b9392505050565b60006123e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128039092919063ffffffff16565b805190915015610b5257808060200190518101906124049190613041565b610b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610240565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051612508939291906130f1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161257792919061312f565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161265b939291906130f1565b60405180910390a46110c186868686868661281a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161257792919061312f565b60006126fc827f01ffc9a700000000000000000000000000000000000000000000000000000000612734565b8015611bb5575061272d827fffffffff00000000000000000000000000000000000000000000000000000000612734565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156127ec575060208210155b80156127f85750600081115b979650505050505050565b60606128128484600085612892565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051612508939291906130f1565b606082471015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610240565b73ffffffffffffffffffffffffffffffffffffffff85163b6129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610240565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129cb91906131bb565b60006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b50915091506127f882828660608315612a2757508161237d565b825115612a375782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102409190612d3d565b73ffffffffffffffffffffffffffffffffffffffff81168114612a8d57600080fd5b50565b60008083601f840112612aa257600080fd5b50813567ffffffffffffffff811115612aba57600080fd5b602083019150836020828501011115612ad257600080fd5b9250929050565b600080600080600080600060c0888a031215612af457600080fd5b8735612aff81612a6b565b96506020880135612b0f81612a6b565b95506040880135612b1f81612a6b565b94506060880135612b2f81612a6b565b93506080880135925060a088013567ffffffffffffffff811115612b5257600080fd5b612b5e8a828b01612a90565b989b979a50959850939692959293505050565b803563ffffffff81168114612b8557600080fd5b919050565b600080600060408486031215612b9f57600080fd5b612ba884612b71565b9250602084013567ffffffffffffffff811115612bc457600080fd5b612bd086828701612a90565b9497909650939450505050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612a6b565b94506020860135612c1081612a6b565b935060408601359250606086013567ffffffffffffffff811115612c3357600080fd5b612c3f88828901612a90565b969995985093965092949392505050565b600080600080600080600060c0888a031215612c6b57600080fd5b8735612c7681612a6b565b96506020880135612c8681612a6b565b95506040880135612c9681612a6b565b945060608801359350612cab60808901612b71565b925060a088013567ffffffffffffffff811115612b5257600080fd5b60005b83811015612ce2578181015183820152602001612cca565b838111156106605750506000910152565b60008151808452612d0b816020860160208601612cc7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184612cf3565b60008060008060008060a08789031215612d6957600080fd5b8635612d7481612a6b565b95506020870135612d8481612a6b565b945060408701359350612d9960608801612b71565b9250608087013567ffffffffffffffff811115612db557600080fd5b612dc189828a01612a90565b979a9699509497509295939492505050565b60008060408385031215612de657600080fd5b8235612df181612a6b565b91506020830135612e0181612a6b565b809150509250929050565b60008060008060608587031215612e2257600080fd5b8435612e2d81612a6b565b9350612e3b60208601612b71565b9250604085013567ffffffffffffffff811115612e5757600080fd5b612e6387828801612a90565b95989497509550505050565b600080600060608486031215612e8457600080fd5b8335612e8f81612a6b565b92506020840135612e9f81612a6b565b91506040840135612eaf81612a6b565b809150509250925092565b600060208284031215612ecc57600080fd5b815161237d81612a6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f1857612f18612ed7565b500390565b60008060408385031215612f3057600080fd5b8251612f3b81612a6b565b602084015190925060ff81168114612e0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f9357600080fd5b815167ffffffffffffffff80821115612fab57600080fd5b818401915084601f830112612fbf57600080fd5b815181811115612fd157612fd1612f52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561301757613017612f52565b8160405282815287602084870101111561303057600080fd5b6127f8836020830160208801612cc7565b60006020828403121561305357600080fd5b8151801515811461237d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130a26080830184612cf3565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130db6060830185612cf3565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006131266060830184612cf3565b95945050505050565b8281526040602082015260006128126040830184612cf3565b6000821982111561315b5761315b612ed7565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526131af60c0830184612cf3565b98975050505050505050565b600082516131cd818460208701612cc7565b919091019291505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -5385,13 +5385,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005f71760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8f806200025b6000396000f3fe60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", - "deployedCode": "0x60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620006371760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6131e4806200025b6000396000f3fe6080604052600436106101b05760003560e01c80635c975abb116100ec5780639a2ac6d51161008a578063c0c53b8b11610064578063c0c53b8b146105c2578063c89701a2146105e2578063d84447151461060f578063e11013dd1461062457600080fd5b80639a2ac6d51461057c578063a9f9e6751461058f578063b1a1a882146105af57600080fd5b806387087623116100c657806387087623146104eb5780638f601f661461050b57806391c49bf8146104a0578063927ede2d1461055157600080fd5b80635c975abb1461048b5780637f46ddb2146104a0578063838b2520146104cb57600080fd5b806335e80ab311610159578063540abf7311610133578063540abf73146103e057806354fd4d5014610400578063550fcdc91461045657806358a997f61461046b57600080fd5b806335e80ab3146103435780633cb747bf146103705780634397dfef1461039d57600080fd5b80631635f5fd1161018a5780631635f5fd146102b457806321326849146102c757806333d7e2bd146102f157600080fd5b80630166a07a1461026e57806309fc88431461028e5780631532ec34146102a157600080fd5b3661026957333b15610249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610267333362030d4060405180602001604052806000815250610653565b005b600080fd5b34801561027a57600080fd5b50610267610289366004612ad9565b610666565b61026761029c366004612b8a565b610a80565b6102676102af366004612bdd565b610b57565b6102676102c2366004612bdd565b610b6b565b3480156102d357600080fd5b506102dc6110c9565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5060335461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e8565b34801561034f57600080fd5b5060325461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037c57600080fd5b5060035461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103b2611108565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102e8565b3480156103ec57600080fd5b506102676103fb366004612c50565b6111a5565b34801561040c57600080fd5b506104496040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e89190612d3d565b34801561046257600080fd5b506104496111ea565b34801561047757600080fd5b50610267610486366004612d50565b6112a5565b34801561049757600080fd5b506102dc611379565b3480156104ac57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661031e565b3480156104d757600080fd5b506102676104e6366004612c50565b61140d565b3480156104f757600080fd5b50610267610506366004612d50565b611452565b34801561051757600080fd5b50610543610526366004612dd3565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e8565b34801561055d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661031e565b61026761058a366004612e0c565b611526565b34801561059b57600080fd5b506102676105aa366004612ad9565b611568565b6102676105bd366004612b8a565b611577565b3480156105ce57600080fd5b506102676105dd366004612e6f565b611648565b3480156105ee57600080fd5b5060045461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061b57600080fd5b50610449611847565b610267610632366004612e0c565b6118b7565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61066084843485856118fa565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610739575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107219190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b6107eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b6107f3611379565b1561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b61086387611b59565b156109b1576108728787611bbb565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050610a33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109ef908490612f06565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a33908585611cdb565b610a77878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611daf92505050565b50505050505050565b333b15610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b523333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b505050565b610b648585858585610b6b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c3e575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b610cf8611379565b15610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b610d676110c9565b15610df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610240565b3073ffffffffffffffffffffffffffffffffffffffff851603610f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610240565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610240565b61101585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3d92505050565b6000611032855a8660405180602001604052806000815250611eb0565b9050806110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610240565b505050505050565b6000806110d4611108565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612f1d565b90939092509050565b610a7787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b603354604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112a09190810190612f81565b905090565b333b15611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613041565b610a7787873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b333b156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b61066033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b610a7787878787878787610666565b333b15611606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b5233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b600054610100900460ff16158080156116685750600054600160ff909116105b806116825750303b158015611682575060005460ff166001145b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610240565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561176c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556117df84734200000000000000000000000000000000000010612204565b801561066057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b603354604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b6106603385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b6119026110c9565b1561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610240565b611a2a858585846122ee565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a8d908b908b9086908a90602401613063565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b20929188906004016130ac565b6000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050505050505050565b6000611b85827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80611bb55750611bb5827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b92915050565b6000611be7837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611c90578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611bb5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b529084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612384565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611e27939291906130f1565b60405180910390a46110c1868686868686612490565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e9c92919061312f565b60405180910390a361066084848484612518565b600080600080845160208601878a8af19695505050505050565b611ed387611b59565b1561202157611ee28787611bbb565b611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506120b5565b61204373ffffffffffffffffffffffffffffffffffffffff8816863086612585565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054612081908490613148565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6120c38787878787866125e3565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090612127908b908d908c908c908c908b90602401613160565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526121ba929187906004016130ac565b600060405180830381600087803b1580156121d457600080fd5b505af11580156121e8573d6000803e3d6000fd5b5050505050505050505050565b610a7787878787878787611eca565b600054610100900460ff1661229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610240565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161234d92919061312f565b60405180910390a361066084848484612671565b600061236c836126d0565b801561237d575061237d8383612734565b9392505050565b60006123e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128039092919063ffffffff16565b805190915015610b5257808060200190518101906124049190613041565b610b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610240565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051612508939291906130f1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161257792919061312f565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161265b939291906130f1565b60405180910390a46110c186868686868661281a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161257792919061312f565b60006126fc827f01ffc9a700000000000000000000000000000000000000000000000000000000612734565b8015611bb5575061272d827fffffffff00000000000000000000000000000000000000000000000000000000612734565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156127ec575060208210155b80156127f85750600081115b979650505050505050565b60606128128484600085612892565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051612508939291906130f1565b606082471015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610240565b73ffffffffffffffffffffffffffffffffffffffff85163b6129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610240565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129cb91906131bb565b60006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b50915091506127f882828660608315612a2757508161237d565b825115612a375782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102409190612d3d565b73ffffffffffffffffffffffffffffffffffffffff81168114612a8d57600080fd5b50565b60008083601f840112612aa257600080fd5b50813567ffffffffffffffff811115612aba57600080fd5b602083019150836020828501011115612ad257600080fd5b9250929050565b600080600080600080600060c0888a031215612af457600080fd5b8735612aff81612a6b565b96506020880135612b0f81612a6b565b95506040880135612b1f81612a6b565b94506060880135612b2f81612a6b565b93506080880135925060a088013567ffffffffffffffff811115612b5257600080fd5b612b5e8a828b01612a90565b989b979a50959850939692959293505050565b803563ffffffff81168114612b8557600080fd5b919050565b600080600060408486031215612b9f57600080fd5b612ba884612b71565b9250602084013567ffffffffffffffff811115612bc457600080fd5b612bd086828701612a90565b9497909650939450505050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612a6b565b94506020860135612c1081612a6b565b935060408601359250606086013567ffffffffffffffff811115612c3357600080fd5b612c3f88828901612a90565b969995985093965092949392505050565b600080600080600080600060c0888a031215612c6b57600080fd5b8735612c7681612a6b565b96506020880135612c8681612a6b565b95506040880135612c9681612a6b565b945060608801359350612cab60808901612b71565b925060a088013567ffffffffffffffff811115612b5257600080fd5b60005b83811015612ce2578181015183820152602001612cca565b838111156106605750506000910152565b60008151808452612d0b816020860160208601612cc7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184612cf3565b60008060008060008060a08789031215612d6957600080fd5b8635612d7481612a6b565b95506020870135612d8481612a6b565b945060408701359350612d9960608801612b71565b9250608087013567ffffffffffffffff811115612db557600080fd5b612dc189828a01612a90565b979a9699509497509295939492505050565b60008060408385031215612de657600080fd5b8235612df181612a6b565b91506020830135612e0181612a6b565b809150509250929050565b60008060008060608587031215612e2257600080fd5b8435612e2d81612a6b565b9350612e3b60208601612b71565b9250604085013567ffffffffffffffff811115612e5757600080fd5b612e6387828801612a90565b95989497509550505050565b600080600060608486031215612e8457600080fd5b8335612e8f81612a6b565b92506020840135612e9f81612a6b565b91506040840135612eaf81612a6b565b809150509250925092565b600060208284031215612ecc57600080fd5b815161237d81612a6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f1857612f18612ed7565b500390565b60008060408385031215612f3057600080fd5b8251612f3b81612a6b565b602084015190925060ff81168114612e0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f9357600080fd5b815167ffffffffffffffff80821115612fab57600080fd5b818401915084601f830112612fbf57600080fd5b815181811115612fd157612fd1612f52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561301757613017612f52565b8160405282815287602084870101111561303057600080fd5b6127f8836020830160208801612cc7565b60006020828403121561305357600080fd5b8151801515811461237d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130a26080830184612cf3565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130db6060830185612cf3565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006131266060830184612cf3565b95945050505050565b8281526040602082015260006128126040830184612cf3565b6000821982111561315b5761315b612ed7565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526131af60c0830184612cf3565b98975050505050505050565b600082516131cd818460208701612cc7565b919091019291505056fea164736f6c634300080f000a", + "deployedCode": "0x6080604052600436106101b05760003560e01c80635c975abb116100ec5780639a2ac6d51161008a578063c0c53b8b11610064578063c0c53b8b146105c2578063c89701a2146105e2578063d84447151461060f578063e11013dd1461062457600080fd5b80639a2ac6d51461057c578063a9f9e6751461058f578063b1a1a882146105af57600080fd5b806387087623116100c657806387087623146104eb5780638f601f661461050b57806391c49bf8146104a0578063927ede2d1461055157600080fd5b80635c975abb1461048b5780637f46ddb2146104a0578063838b2520146104cb57600080fd5b806335e80ab311610159578063540abf7311610133578063540abf73146103e057806354fd4d5014610400578063550fcdc91461045657806358a997f61461046b57600080fd5b806335e80ab3146103435780633cb747bf146103705780634397dfef1461039d57600080fd5b80631635f5fd1161018a5780631635f5fd146102b457806321326849146102c757806333d7e2bd146102f157600080fd5b80630166a07a1461026e57806309fc88431461028e5780631532ec34146102a157600080fd5b3661026957333b15610249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610267333362030d4060405180602001604052806000815250610653565b005b600080fd5b34801561027a57600080fd5b50610267610289366004612ad9565b610666565b61026761029c366004612b8a565b610a80565b6102676102af366004612bdd565b610b57565b6102676102c2366004612bdd565b610b6b565b3480156102d357600080fd5b506102dc6110c9565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5060335461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e8565b34801561034f57600080fd5b5060325461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037c57600080fd5b5060035461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103b2611108565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102e8565b3480156103ec57600080fd5b506102676103fb366004612c50565b6111a5565b34801561040c57600080fd5b506104496040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e89190612d3d565b34801561046257600080fd5b506104496111ea565b34801561047757600080fd5b50610267610486366004612d50565b6112a5565b34801561049757600080fd5b506102dc611379565b3480156104ac57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661031e565b3480156104d757600080fd5b506102676104e6366004612c50565b61140d565b3480156104f757600080fd5b50610267610506366004612d50565b611452565b34801561051757600080fd5b50610543610526366004612dd3565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e8565b34801561055d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661031e565b61026761058a366004612e0c565b611526565b34801561059b57600080fd5b506102676105aa366004612ad9565b611568565b6102676105bd366004612b8a565b611577565b3480156105ce57600080fd5b506102676105dd366004612e6f565b611648565b3480156105ee57600080fd5b5060045461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061b57600080fd5b50610449611847565b610267610632366004612e0c565b6118b7565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61066084843485856118fa565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610739575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107219190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b6107eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b6107f3611379565b1561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b61086387611b59565b156109b1576108728787611bbb565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050610a33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109ef908490612f06565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a33908585611cdb565b610a77878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611daf92505050565b50505050505050565b333b15610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b523333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b505050565b610b648585858585610b6b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c3e575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b610cf8611379565b15610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b610d676110c9565b15610df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610240565b3073ffffffffffffffffffffffffffffffffffffffff851603610f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610240565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610240565b61101585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3d92505050565b6000611032855a8660405180602001604052806000815250611eb0565b9050806110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610240565b505050505050565b6000806110d4611108565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612f1d565b90939092509050565b610a7787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b603354604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112a09190810190612f81565b905090565b333b15611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613041565b610a7787873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b333b156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b61066033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b610a7787878787878787610666565b333b15611606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b5233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b600054610100900460ff16158080156116685750600054600160ff909116105b806116825750303b158015611682575060005460ff166001145b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610240565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561176c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556117df84734200000000000000000000000000000000000010612204565b801561066057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b603354604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b6106603385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b6119026110c9565b1561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610240565b611a2a858585846122ee565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a8d908b908b9086908a90602401613063565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b20929188906004016130ac565b6000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050505050505050565b6000611b85827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80611bb55750611bb5827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b92915050565b6000611be7837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611c90578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611bb5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b529084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612384565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611e27939291906130f1565b60405180910390a46110c1868686868686612490565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e9c92919061312f565b60405180910390a361066084848484612518565b600080600080845160208601878a8af19695505050505050565b611ed387611b59565b1561202157611ee28787611bbb565b611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506120b5565b61204373ffffffffffffffffffffffffffffffffffffffff8816863086612585565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054612081908490613148565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6120c38787878787866125e3565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090612127908b908d908c908c908c908b90602401613160565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526121ba929187906004016130ac565b600060405180830381600087803b1580156121d457600080fd5b505af11580156121e8573d6000803e3d6000fd5b5050505050505050505050565b610a7787878787878787611eca565b600054610100900460ff1661229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610240565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161234d92919061312f565b60405180910390a361066084848484612671565b600061236c836126d0565b801561237d575061237d8383612734565b9392505050565b60006123e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128039092919063ffffffff16565b805190915015610b5257808060200190518101906124049190613041565b610b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610240565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051612508939291906130f1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161257792919061312f565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161265b939291906130f1565b60405180910390a46110c186868686868661281a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161257792919061312f565b60006126fc827f01ffc9a700000000000000000000000000000000000000000000000000000000612734565b8015611bb5575061272d827fffffffff00000000000000000000000000000000000000000000000000000000612734565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156127ec575060208210155b80156127f85750600081115b979650505050505050565b60606128128484600085612892565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051612508939291906130f1565b606082471015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610240565b73ffffffffffffffffffffffffffffffffffffffff85163b6129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610240565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129cb91906131bb565b60006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b50915091506127f882828660608315612a2757508161237d565b825115612a375782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102409190612d3d565b73ffffffffffffffffffffffffffffffffffffffff81168114612a8d57600080fd5b50565b60008083601f840112612aa257600080fd5b50813567ffffffffffffffff811115612aba57600080fd5b602083019150836020828501011115612ad257600080fd5b9250929050565b600080600080600080600060c0888a031215612af457600080fd5b8735612aff81612a6b565b96506020880135612b0f81612a6b565b95506040880135612b1f81612a6b565b94506060880135612b2f81612a6b565b93506080880135925060a088013567ffffffffffffffff811115612b5257600080fd5b612b5e8a828b01612a90565b989b979a50959850939692959293505050565b803563ffffffff81168114612b8557600080fd5b919050565b600080600060408486031215612b9f57600080fd5b612ba884612b71565b9250602084013567ffffffffffffffff811115612bc457600080fd5b612bd086828701612a90565b9497909650939450505050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612a6b565b94506020860135612c1081612a6b565b935060408601359250606086013567ffffffffffffffff811115612c3357600080fd5b612c3f88828901612a90565b969995985093965092949392505050565b600080600080600080600060c0888a031215612c6b57600080fd5b8735612c7681612a6b565b96506020880135612c8681612a6b565b95506040880135612c9681612a6b565b945060608801359350612cab60808901612b71565b925060a088013567ffffffffffffffff811115612b5257600080fd5b60005b83811015612ce2578181015183820152602001612cca565b838111156106605750506000910152565b60008151808452612d0b816020860160208601612cc7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184612cf3565b60008060008060008060a08789031215612d6957600080fd5b8635612d7481612a6b565b95506020870135612d8481612a6b565b945060408701359350612d9960608801612b71565b9250608087013567ffffffffffffffff811115612db557600080fd5b612dc189828a01612a90565b979a9699509497509295939492505050565b60008060408385031215612de657600080fd5b8235612df181612a6b565b91506020830135612e0181612a6b565b809150509250929050565b60008060008060608587031215612e2257600080fd5b8435612e2d81612a6b565b9350612e3b60208601612b71565b9250604085013567ffffffffffffffff811115612e5757600080fd5b612e6387828801612a90565b95989497509550505050565b600080600060608486031215612e8457600080fd5b8335612e8f81612a6b565b92506020840135612e9f81612a6b565b91506040840135612eaf81612a6b565b809150509250925092565b600060208284031215612ecc57600080fd5b815161237d81612a6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f1857612f18612ed7565b500390565b60008060408385031215612f3057600080fd5b8251612f3b81612a6b565b602084015190925060ff81168114612e0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f9357600080fd5b815167ffffffffffffffff80821115612fab57600080fd5b818401915084601f830112612fbf57600080fd5b815181811115612fd157612fd1612f52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561301757613017612f52565b8160405282815287602084870101111561303057600080fd5b6127f8836020830160208801612cc7565b60006020828403121561305357600080fd5b8151801515811461237d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130a26080830184612cf3565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130db6060830185612cf3565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006131266060830184612cf3565b95945050505050565b8281526040602082015260006128126040830184612cf3565b6000821982111561315b5761315b612ed7565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526131af60c0830184612cf3565b98975050505050505050565b600082516131cd818460208701612cc7565b919091019291505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -5399,7 +5399,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5407,7 +5407,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5415,7 +5415,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5423,7 +5423,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5431,7 +5431,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5439,7 +5439,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5447,7 +5447,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5455,7 +5455,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5463,7 +5463,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5471,7 +5471,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5479,7 +5479,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5487,7 +5487,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5495,7 +5495,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5503,7 +5503,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5511,7 +5511,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5519,7 +5519,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5527,7 +5527,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5556,7 +5556,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5570,7 +5570,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5582,7 +5582,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5596,7 +5596,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5608,7 +5608,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5622,7 +5622,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5634,7 +5634,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5648,7 +5648,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5660,7 +5660,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5674,7 +5674,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -7978,7 +7978,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb741300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8004,7 +8004,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb741300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -8070,7 +8070,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb741300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8137,7 +8137,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8156,7 +8156,7 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -8234,8 +8234,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", - "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8244,7 +8244,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8466,8 +8466,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", - "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8476,7 +8476,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8561,8 +8561,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", - "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8571,7 +8571,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8665,8 +8665,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", - "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8675,7 +8675,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8769,8 +8769,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", - "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8779,7 +8779,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8873,8 +8873,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", - "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8883,7 +8883,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8977,8 +8977,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", - "previousValue": "0x000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e", + "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8987,7 +8987,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E", + "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9873,7 +9873,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x238181ae000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "data": "0x238181ae0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", "deployedCode": "0x", "initialized": true, "kind": "StaticCall", @@ -9887,7 +9887,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xfb690be7489a401fecbc8149d22c2c5df2d372b3e71ff84c22d137fac267fad1" + "slot": "0xf1f0527c387649edea64c011da8ef7954d582b390ce3a6ee3a48756b3a12ade3" }, { "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", @@ -9895,7 +9895,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xfb690be7489a401fecbc8149d22c2c5df2d372b3e71ff84c22d137fac267fad1" + "slot": "0xf1f0527c387649edea64c011da8ef7954d582b390ce3a6ee3a48756b3a12ade3" } ], "value": 0 @@ -10083,7 +10083,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10109,7 +10109,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -10175,7 +10175,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10274,7 +10274,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b2ea4bd0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", + "data": "0x9b2ea4bd00000000000000000000000000000000000000000000000000000000000000400000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10301,7 +10301,7 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": true, - "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" @@ -10361,8 +10361,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", - "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10371,7 +10371,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10599,8 +10599,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", - "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10609,7 +10609,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10676,8 +10676,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", - "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10686,7 +10686,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10762,8 +10762,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", - "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10772,7 +10772,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10848,8 +10848,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", - "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10858,7 +10858,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10934,8 +10934,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", - "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10944,7 +10944,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11020,8 +11020,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", - "previousValue": "0x000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a", + "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -11030,7 +11030,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a", + "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", "chainInfo": { "chainId": 31337, "forkId": 0 diff --git a/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol index ba86fdbed1a..081d0c97ddc 100644 --- a/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol @@ -60,6 +60,16 @@ contract L1CrossDomainMessenger is CrossDomainMessenger, ISemver { (_addr, _decimals) = systemConfig.gasPayingToken(); } + /// @inheritdoc CrossDomainMessenger + function gasPayingTokenName() public view override returns (string memory name_) { + name_ = systemConfig.gasPayingTokenName(); + } + + /// @inheritdoc CrossDomainMessenger + function gasPayingTokenSymbol() public view override returns (string memory symbol_) { + symbol_ = systemConfig.gasPayingTokenSymbol(); + } + /// @notice Getter function for the OptimismPortal contract on this chain. /// Public getter is legacy and will be removed in the future. Use `portal()` instead. /// @return Contract of the OptimismPortal on this chain. diff --git a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol index 1cc9575428a..74e596f1f01 100644 --- a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol +++ b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol @@ -124,6 +124,16 @@ contract L1StandardBridge is StandardBridge, ISemver { (addr_, decimals_) = systemConfig.gasPayingToken(); } + /// @inheritdoc StandardBridge + function gasPayingTokenName() public view override returns (string memory name_) { + name_ = systemConfig.gasPayingTokenName(); + } + + /// @inheritdoc StandardBridge + function gasPayingTokenSymbol() public view override returns (string memory symbol_) { + symbol_ = systemConfig.gasPayingTokenSymbol(); + } + /// @custom:legacy /// @notice Deposits some amount of ETH into the sender's account on L2. /// @param _minGasLimit Minimum gas limit for the deposit message on L2. diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index b302dbcfa05..9bce81238c3 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -7,14 +7,14 @@ import { ResourceMetering } from "src/L1/ResourceMetering.sol"; import { Storage } from "src/libraries/Storage.sol"; import { Constants } from "src/libraries/Constants.sol"; import { OptimismPortal } from "src/L1/OptimismPortal.sol"; -import { GasPayingToken } from "src/libraries/GasPayingToken.sol"; +import { GasPayingToken, IGasToken } from "src/libraries/GasPayingToken.sol"; import { ERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol"; /// @title SystemConfig /// @notice The SystemConfig contract is used to manage configuration of an Optimism network. /// All configuration is stored on L1 and picked up by L2 as part of the derviation of /// the L2 chain. -contract SystemConfig is OwnableUpgradeable, ISemver { +contract SystemConfig is OwnableUpgradeable, ISemver, IGasToken { /// @notice Enum representing different types of updates. /// @custom:value BATCHER Represents an update to the batcher hash. /// @custom:value GAS_CONFIG Represents an update to txn fee config on L2. diff --git a/packages/contracts-bedrock/src/L2/L1Block.sol b/packages/contracts-bedrock/src/L2/L1Block.sol index d9b5b88126f..bbd79bb97d7 100644 --- a/packages/contracts-bedrock/src/L2/L1Block.sol +++ b/packages/contracts-bedrock/src/L2/L1Block.sol @@ -4,7 +4,7 @@ pragma solidity 0.8.15; import { ISemver } from "src/universal/ISemver.sol"; import { Constants } from "src/libraries/Constants.sol"; import { Storage } from "src/libraries/Storage.sol"; -import { GasPayingToken } from "src/libraries/GasPayingToken.sol"; +import { GasPayingToken, IGasToken } from "src/libraries/GasPayingToken.sol"; /// @custom:proxied /// @custom:predeploy 0x4200000000000000000000000000000000000015 @@ -13,7 +13,7 @@ import { GasPayingToken } from "src/libraries/GasPayingToken.sol"; /// Values within this contract are updated once per epoch (every L1 block) and can only be /// set by the "depositor" account, a special system address. Depositor account transactions /// are created by the protocol whenever we move to a new epoch. -contract L1Block is ISemver { +contract L1Block is ISemver, IGasToken { /// @notice Error returns when a non-depositor account tries to set L1 block values. error NotDepositor(); diff --git a/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol index 667fc60d741..e89f5b822f5 100644 --- a/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol @@ -51,6 +51,16 @@ contract L2CrossDomainMessenger is CrossDomainMessenger, ISemver { (addr_, decimals_) = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingToken(); } + /// @inheritdoc CrossDomainMessenger + function gasPayingTokenName() public view override returns (string memory name_) { + name_ = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingTokenName(); + } + + /// @inheritdoc CrossDomainMessenger + function gasPayingTokenSymbol() public view override returns (string memory symbol_) { + symbol_ = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingTokenSymbol(); + } + /// @inheritdoc CrossDomainMessenger function _isOtherMessenger() internal view override returns (bool) { return AddressAliasHelper.undoL1ToL2Alias(msg.sender) == address(otherMessenger); diff --git a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol index f831b7ccfff..81d18b9d319 100644 --- a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol +++ b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol @@ -81,6 +81,16 @@ contract L2StandardBridge is StandardBridge, ISemver { (addr_, decimals_) = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingToken(); } + /// @inheritdoc StandardBridge + function gasPayingTokenName() public view override returns (string memory name_) { + name_ = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingTokenName(); + } + + /// @inheritdoc StandardBridge + function gasPayingTokenSymbol() public view override returns (string memory symbol_) { + symbol_ = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingTokenSymbol(); + } + /// @custom:legacy /// @notice Initiates a withdrawal from L2 to L1. /// This function only works with OptimismMintableERC20 tokens or ether. Use the diff --git a/packages/contracts-bedrock/src/libraries/GasPayingToken.sol b/packages/contracts-bedrock/src/libraries/GasPayingToken.sol index 6ebfa9bb875..37c06840bd5 100644 --- a/packages/contracts-bedrock/src/libraries/GasPayingToken.sol +++ b/packages/contracts-bedrock/src/libraries/GasPayingToken.sol @@ -5,6 +5,20 @@ import { Storage } from "src/libraries/Storage.sol"; import { Constants } from "src/libraries/Constants.sol"; import { LibString } from "@solady/utils/LibString.sol"; +/// @title IGasToken +/// @notice Implemented by contracts that are aware of the custom gas token used +/// by the L2 network. +interface IGasToken { + /// @notice Getter for the ERC20 token address that is used to pay for gas and its decimals. + function gasPayingToken() external view returns (address, uint8); + /// @notice Returns the gas token name. + function gasPayingTokenName() external view returns (string memory); + /// @notice Returns the gas token symbol. + function gasPayingTokenSymbol() external view returns (string memory); + /// @notice Returns true if the network uses a custom gas token. + function isCustomGasToken() external view returns (bool); +} + /// @title GasPayingToken /// @notice Handles reading and writing the custom gas token to storage. /// To be used in any place where gas token information is read or diff --git a/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol b/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol index f850c0ddaf8..5274f831c71 100644 --- a/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol @@ -6,6 +6,7 @@ import { SafeCall } from "src/libraries/SafeCall.sol"; import { Hashing } from "src/libraries/Hashing.sol"; import { Encoding } from "src/libraries/Encoding.sol"; import { Constants } from "src/libraries/Constants.sol"; +import { IGasToken } from "src/libraries/GasPayingToken.sol"; /// @custom:legacy /// @title CrossDomainMessengerLegacySpacer0 @@ -87,7 +88,8 @@ contract CrossDomainMessengerLegacySpacer1 { abstract contract CrossDomainMessenger is CrossDomainMessengerLegacySpacer0, Initializable, - CrossDomainMessengerLegacySpacer1 + CrossDomainMessengerLegacySpacer1, + IGasToken { /// @notice Current message version identifier. uint16 public constant MESSAGE_VERSION = 1; @@ -362,13 +364,18 @@ abstract contract CrossDomainMessenger is + RELAY_GAS_CHECK_BUFFER; } - /// @notice Getter for the ERC20 token address that is used to pay for gas - /// and its decimals. Must be implemented by the contracts that inherit it. - function gasPayingToken() public virtual returns (address, uint8); + /// @inheritdoc IGasToken + /// @notice Must be implemented by the contracts that inherit it. + function gasPayingToken() public view virtual returns (address, uint8); - /// @notice Getter for custom gas token paying networks. Returns true if the - /// network uses a custom gas token. - function isCustomGasToken() public returns (bool) { + /// @inheritdoc IGasToken + function gasPayingTokenName() public view virtual returns (string memory); + + /// @inheritdoc IGasToken + function gasPayingTokenSymbol() public view virtual returns (string memory); + + /// @inheritdoc IGasToken + function isCustomGasToken() public view returns (bool) { (address token,) = gasPayingToken(); return token != Constants.ETHER; } diff --git a/packages/contracts-bedrock/src/universal/StandardBridge.sol b/packages/contracts-bedrock/src/universal/StandardBridge.sol index e6732fb957d..2c54fe50a24 100644 --- a/packages/contracts-bedrock/src/universal/StandardBridge.sol +++ b/packages/contracts-bedrock/src/universal/StandardBridge.sol @@ -11,13 +11,14 @@ import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; import { OptimismMintableERC20 } from "src/universal/OptimismMintableERC20.sol"; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import { Constants } from "src/libraries/Constants.sol"; +import { IGasToken } from "src/libraries/GasPayingToken.sol"; /// @custom:upgradeable /// @title StandardBridge /// @notice StandardBridge is a base contract for the L1 and L2 standard ERC20 bridges. It handles /// the core bridging logic, including escrowing tokens that are native to the local chain /// and minting/burning tokens that are native to the remote chain. -abstract contract StandardBridge is Initializable { +abstract contract StandardBridge is Initializable, IGasToken { using SafeERC20 for IERC20; /// @notice The L2 gas limit set when eth is depoisited using the receive() function. @@ -130,13 +131,18 @@ abstract contract StandardBridge is Initializable { /// Must be implemented by contracts that inherit. receive() external payable virtual; - /// @notice Getter for the ERC20 token address that is used to pay for gas - /// and its decimals. Must be implemented by the contracts that inherit it. - function gasPayingToken() public virtual returns (address, uint8); + /// @inheritdoc IGasToken + function gasPayingToken() public view virtual returns (address, uint8); + + /// @inheritdoc IGasToken + function gasPayingTokenName() public view virtual returns (string memory); + + /// @inheritdoc IGasToken + function gasPayingTokenSymbol() public view virtual returns (string memory); /// @notice Getter for custom gas token paying networks. Returns true if the /// network uses a custom gas token. - function isCustomGasToken() public returns (bool) { + function isCustomGasToken() public view returns (bool) { (address token,) = gasPayingToken(); return token != Constants.ETHER; } diff --git a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol index c488f0ad60c..ed170b47f7c 100644 --- a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol @@ -639,7 +639,7 @@ contract L1CrossDomainMessenger_Test is Bridge_Initializer { } /// @dev Tests that isCustomGasToken returns the correct value for ETH as the gas token. - function test_isCustomGasToken_ether_succeeds() external { + function test_isCustomGasToken_ether_succeeds() external view { assertFalse(l1CrossDomainMessenger.isCustomGasToken()); } diff --git a/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol b/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol index b877c103804..e2cfe048a03 100644 --- a/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol @@ -37,7 +37,7 @@ contract L1StandardBridge_Getter_Test is Bridge_Initializer { } /// @dev Tests that the `isCustomGasToken` function returns the correct value when the gas token is ether. - function test_isCustomGasToken_ether_succeeds() external { + function test_isCustomGasToken_ether_succeeds() external view { assertFalse(l1StandardBridge.isCustomGasToken()); } diff --git a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol index 2a176385f34..f2fd3753bf4 100644 --- a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol @@ -245,7 +245,7 @@ contract L2CrossDomainMessenger_Test is Bridge_Initializer { } /// @dev Tests that isCustomGasToken returns the correct value for ETH as the gas token. - function test_isCustomGasToken_ether_succeeds() external { + function test_isCustomGasToken_ether_succeeds() external view { assertFalse(l2CrossDomainMessenger.isCustomGasToken()); } diff --git a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol index 646dea7b4d2..2db58c91145 100644 --- a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol @@ -202,7 +202,7 @@ contract L2StandardBridge_Test is Bridge_Initializer { } /// @dev Tests that the `isCustomGasToken` function returns the correct value when the gas token is ether. - function test_isCustomGasToken_ether_succeeds() external { + function test_isCustomGasToken_ether_succeeds() external view { assertFalse(l2StandardBridge.isCustomGasToken()); } diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index c7dba54db4f..0183eb6d6b5 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -13,11 +13,11 @@ contract DeploymentSummary is DeploymentSummaryCode { Vm private constant vm = Vm(VM_ADDRESS); address internal constant addressManagerAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; - address internal constant l1CrossDomainMessengerAddress = 0xDF8d96584fb9b5360BA03eCbb609C40cDD7A699a; + address internal constant l1CrossDomainMessengerAddress = 0x8138C9dbFc8ea04E27856B1574cDA032565772eB; address internal constant l1CrossDomainMessengerProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; address internal constant l1ERC721BridgeAddress = 0x44637A4292E0CD2B17A55d5F6B2F05AFcAcD0586; address internal constant l1ERC721BridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant l1StandardBridgeAddress = 0xc33E78bd64c27AC51036eE3f69AdD48A637f9e8E; + address internal constant l1StandardBridgeAddress = 0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413; address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; @@ -344,7 +344,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000005"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000c33e78bd64c27ac51036ee3f69add48a637f9e8e"; + value = hex"000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -407,7 +407,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000009"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e"; - value = hex"000000000000000000000000df8d96584fb9b5360ba03ecbb609c40cdd7a699a"; + value = hex"0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb"; vm.store(addressManagerAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000010000000000000000000000000000000000000000"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index 18351e2bba3..ce123b02cb1 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -37,13 +37,13 @@ contract DeploymentSummaryCode { bytes internal constant optimismPortalCode = hex"60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; bytes internal constant l1CrossDomainMessengerCode = - hex"6080604052600436106101a15760003560e01c80635c975abb116100e1578063a4e7f8bd1161008a578063c0c53b8b11610064578063c0c53b8b146104e9578063d764ad0b14610509578063db505d801461051c578063ecc704281461054957600080fd5b8063a4e7f8bd14610469578063b1b1b20914610499578063b28ade25146104c957600080fd5b806383a74074116100bb57806383a74074146104275780638cbeeef21461034e5780639fce812c1461043e57600080fd5b80635c975abb146103d05780636425666b146103e55780636e296e451461041257600080fd5b806335e80ab31161014e5780634397dfef116101285780634397dfef1461030b5780634c1d6a691461034e57806354fd4d50146103645780635644cfdf146103ba57600080fd5b806335e80ab3146102a15780633dbb202b146102ce5780633f827a5a146102e357600080fd5b8063213268491161017f578063213268491461023a5780632828d7e81461025f57806333d7e2bd1461027457600080fd5b8063028f85f7146101a65780630c568498146101d95780630ff754ea146101ee575b600080fd5b3480156101b257600080fd5b506101bb601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101e557600080fd5b506101bb603f81565b3480156101fa57600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b34801561024657600080fd5b5061024f6105ae565b60405190151581526020016101d0565b34801561026b57600080fd5b506101bb604081565b34801561028057600080fd5b5060fd546102159073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102ad57600080fd5b5060fb546102159073ffffffffffffffffffffffffffffffffffffffff1681565b6102e16102dc366004611c4d565b6105ed565b005b3480156102ef57600080fd5b506102f8600181565b60405161ffff90911681526020016101d0565b34801561031757600080fd5b506103206108ea565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101d0565b34801561035a57600080fd5b506101bb619c4081565b34801561037057600080fd5b506103ad6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101d09190611d1f565b3480156103c657600080fd5b506101bb61138881565b3480156103dc57600080fd5b5061024f610987565b3480156103f157600080fd5b5060fc546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041e57600080fd5b50610215610a20565b34801561043357600080fd5b506101bb62030d4081565b34801561044a57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff16610215565b34801561047557600080fd5b5061024f610484366004611d39565b60ce6020526000908152604090205460ff1681565b3480156104a557600080fd5b5061024f6104b4366004611d39565b60cb6020526000908152604090205460ff1681565b3480156104d557600080fd5b506101bb6104e4366004611d52565b610b07565b3480156104f557600080fd5b506102e1610504366004611da6565b610b75565b6102e1610517366004611df1565b610dec565b34801561052857600080fd5b5060cf546102159073ffffffffffffffffffffffffffffffffffffffff1681565b34801561055557600080fd5b506105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101d0565b6000806105b96108ea565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6105f56105ae565b1561068d57341561068d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107bf9073ffffffffffffffffffffffffffffffffffffffff166106b5858585610b07565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061072160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161073d9796959493929190611ec0565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261171d565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561084460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610856959493929190611f1f565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561095a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061097e9190611f6d565b90939092509050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156109f7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1b9190611fad565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610aea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610684565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610b23604063ffffffff8816611ffe565b610b2d919061202e565b610b38601088611ffe565b610b459062030d4061207c565b610b4f919061207c565b610b59919061207c565b610b63919061207c565b610b6d919061207c565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610bc0575060005460017401000000000000000000000000000000000000000090910460ff16105b80610bf25750303b158015610bf2575060005474010000000000000000000000000000000000000000900460ff166001145b610c7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610684565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610d0457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610d837342000000000000000000000000000000000000076117b6565b8015610de657600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610df4610987565b15610e5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a20706175736564000000006044820152606401610684565b60f087901c60028110610f16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610684565b8061ffff1660000361100b576000610f67878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506118f2915050565b600081815260cb602052604090205490915060ff1615611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610684565b505b6000611051898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061191192505050565b905061105b611934565b156110935785341461106f5761106f6120a8565b600081815260ce602052604090205460ff161561108e5761108e6120a8565b6111e5565b3415611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610684565b600081815260ce602052604090205460ff166111e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610684565b6111ee87611a10565b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610684565b600081815260cb602052604090205460ff1615611340576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610684565b61136185611352611388619c4061207c565b67ffffffffffffffff16611a56565b1580611387575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b156114a057600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b50506116f8565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061153188619c405a6114f491906120d7565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7492505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156115e757600082815260cb602052604090205460ff1615611584576115846120a8565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26116f4565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016116f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610684565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c4290849061177e9088908390899060009089906004016120ee565b6000604051808303818588803b15801561179757600080fd5b505af11580156117ab573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610684565b60cc5473ffffffffffffffffffffffffffffffffffffffff166118ab5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600061190085858585611a8e565b805190602001209050949350505050565b6000611921878787878787611b27565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a1b575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156119d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f49190612146565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611a50575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611aa79493929190612163565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611b44969594939291906121ad565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611be857600080fd5b50565b60008083601f840112611bfd57600080fd5b50813567ffffffffffffffff811115611c1557600080fd5b602083019150836020828501011115611c2d57600080fd5b9250929050565b803563ffffffff81168114611c4857600080fd5b919050565b60008060008060608587031215611c6357600080fd5b8435611c6e81611bc6565b9350602085013567ffffffffffffffff811115611c8a57600080fd5b611c9687828801611beb565b9094509250611ca9905060408601611c34565b905092959194509250565b6000815180845260005b81811015611cda57602081850181015186830182015201611cbe565b81811115611cec576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611d326020830184611cb4565b9392505050565b600060208284031215611d4b57600080fd5b5035919050565b600080600060408486031215611d6757600080fd5b833567ffffffffffffffff811115611d7e57600080fd5b611d8a86828701611beb565b9094509250611d9d905060208501611c34565b90509250925092565b600080600060608486031215611dbb57600080fd5b8335611dc681611bc6565b92506020840135611dd681611bc6565b91506040840135611de681611bc6565b809150509250925092565b600080600080600080600060c0888a031215611e0c57600080fd5b873596506020880135611e1e81611bc6565b95506040880135611e2e81611bc6565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611e5857600080fd5b611e648a828b01611beb565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611f1260c083018486611e77565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611f4f608083018688611e77565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611f8057600080fd5b8251611f8b81611bc6565b602084015190925060ff81168114611fa257600080fd5b809150509250929050565b600060208284031215611fbf57600080fd5b81518015158114611d3257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff8083168185168183048111821515161561202557612025611fcf565b02949350505050565b600067ffffffffffffffff80841680612070577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561209f5761209f611fcf565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156120e9576120e9611fcf565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061213b60a0830184611cb4565b979650505050505050565b60006020828403121561215857600080fd5b8151611d3281611bc6565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261219c6080830185611cb4565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526121f860c0830184611cb4565b9897505050505050505056fea164736f6c634300080f000a"; + hex"6080604052600436106101b75760003560e01c80635c975abb116100ec578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610534578063d844471514610547578063db505d801461055c578063ecc704281461058957600080fd5b8063b1b1b209146104c4578063b28ade25146104f4578063c0c53b8b1461051457600080fd5b806383a74074116100c657806383a74074146104525780638cbeeef2146103645780639fce812c14610469578063a4e7f8bd1461049457600080fd5b80635c975abb146103fb5780636425666b146104105780636e296e451461043d57600080fd5b80633dbb202b116101595780634c1d6a69116101335780634c1d6a691461036457806354fd4d501461037a578063550fcdc9146103d05780635644cfdf146103e557600080fd5b80633dbb202b146102e45780633f827a5a146102f95780634397dfef1461032157600080fd5b8063213268491161019557806321326849146102505780632828d7e81461027557806333d7e2bd1461028a57806335e80ab3146102b757600080fd5b8063028f85f7146101bc5780630c568498146101ef5780630ff754ea14610204575b600080fd5b3480156101c857600080fd5b506101d1601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506101d1603f81565b34801561021057600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b34801561025c57600080fd5b506102656105ee565b60405190151581526020016101e6565b34801561028157600080fd5b506101d1604081565b34801561029657600080fd5b5060fd5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102c357600080fd5b5060fb5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f76102f2366004611db3565b61062d565b005b34801561030557600080fd5b5061030e600181565b60405161ffff90911681526020016101e6565b34801561032d57600080fd5b5061033661092a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101e6565b34801561037057600080fd5b506101d1619c4081565b34801561038657600080fd5b506103c36040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101e69190611e90565b3480156103dc57600080fd5b506103c36109c7565b3480156103f157600080fd5b506101d161138881565b34801561040757600080fd5b50610265610a82565b34801561041c57600080fd5b5060fc5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044957600080fd5b5061022b610b16565b34801561045e57600080fd5b506101d162030d4081565b34801561047557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661022b565b3480156104a057600080fd5b506102656104af366004611eaa565b60ce6020526000908152604090205460ff1681565b3480156104d057600080fd5b506102656104df366004611eaa565b60cb6020526000908152604090205460ff1681565b34801561050057600080fd5b506101d161050f366004611ec3565b610bfd565b34801561052057600080fd5b506102f761052f366004611f17565b610c6b565b6102f7610542366004611f62565b610ee2565b34801561055357600080fd5b506103c36117f7565b34801561056857600080fd5b5060cf5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059557600080fd5b506105e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101e6565b6000806105f961092a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6106356105ee565b156106cd5734156106cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107ff9073ffffffffffffffffffffffffffffffffffffffff166106f5858585610bfd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061076160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161077d9796959493929190612031565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611883565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561088460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610896959493929190612090565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906120de565b90939092509050565b60fd54604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7d919081019061214d565b905090565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612218565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016106c4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610c19604063ffffffff8816612269565b610c239190612299565b610c2e601088612269565b610c3b9062030d406122e7565b610c4591906122e7565b610c4f91906122e7565b610c5991906122e7565b610c6391906122e7565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610cb6575060005460017401000000000000000000000000000000000000000090910460ff16105b80610ce85750303b158015610ce8575060005474010000000000000000000000000000000000000000900460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106c4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610dfa57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610e7973420000000000000000000000000000000000000761191c565b8015610edc57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610eea610a82565b15610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016106c4565b60f087901c6002811061100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016106c4565b8061ffff1660000361110157600061105d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611a58915050565b600081815260cb602052604090205490915060ff16156110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016106c4565b505b6000611147898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7792505050565b9050611151611a9a565b156111895785341461116557611165612313565b600081815260ce602052604090205460ff161561118457611184612313565b6112db565b341561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016106c4565b600081815260ce602052604090205460ff166112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016106c4565b6112e487611b76565b15611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016106c4565b600081815260cb602052604090205460ff1615611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016106c4565b61145785611448611388619c406122e7565b67ffffffffffffffff16611bbc565b158061147d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561159657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b50506117ee565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061162788619c405a6115ea9190612342565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bda92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156116dd57600082815260cb602052604090205460ff161561167a5761167a612313565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26117ea565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b5050505b50505050505050565b60fd54604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906118e4908890839089906000908990600401612359565b6000604051808303818588803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106c4565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611a115760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a6685858585611bf4565b805190602001209050949350505050565b6000611a87878787878787611c8d565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a7d575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a91906123a6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611bb6575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611c0d94939291906123c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611caa9695949392919061240d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d4e57600080fd5b50565b60008083601f840112611d6357600080fd5b50813567ffffffffffffffff811115611d7b57600080fd5b602083019150836020828501011115611d9357600080fd5b9250929050565b803563ffffffff81168114611dae57600080fd5b919050565b60008060008060608587031215611dc957600080fd5b8435611dd481611d2c565b9350602085013567ffffffffffffffff811115611df057600080fd5b611dfc87828801611d51565b9094509250611e0f905060408601611d9a565b905092959194509250565b60005b83811015611e35578181015183820152602001611e1d565b83811115610edc5750506000910152565b60008151808452611e5e816020860160208601611e1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ea36020830184611e46565b9392505050565b600060208284031215611ebc57600080fd5b5035919050565b600080600060408486031215611ed857600080fd5b833567ffffffffffffffff811115611eef57600080fd5b611efb86828701611d51565b9094509250611f0e905060208501611d9a565b90509250925092565b600080600060608486031215611f2c57600080fd5b8335611f3781611d2c565b92506020840135611f4781611d2c565b91506040840135611f5781611d2c565b809150509250925092565b600080600080600080600060c0888a031215611f7d57600080fd5b873596506020880135611f8f81611d2c565b95506040880135611f9f81611d2c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611fc957600080fd5b611fd58a828b01611d51565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261208360c083018486611fe8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c0608083018688611fe8565b905083604083015263ffffffff831660608301529695505050505050565b600080604083850312156120f157600080fd5b82516120fc81611d2c565b602084015190925060ff8116811461211357600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561215f57600080fd5b815167ffffffffffffffff8082111561217757600080fd5b818401915084601f83011261218b57600080fd5b81518181111561219d5761219d61211e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e361211e565b816040528281528760208487010111156121fc57600080fd5b61220d836020830160208801611e1a565b979650505050505050565b60006020828403121561222a57600080fd5b81518015158114611ea357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156122905761229061223a565b02949350505050565b600067ffffffffffffffff808416806122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561230a5761230a61223a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156123545761235461223a565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061220d60a0830184611e46565b6000602082840312156123b857600080fd5b8151611ea381611d2c565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526123fc6080830185611e46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261245860c0830184611e46565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant l2OutputOracleCode = hex"60806040526004361061018a5760003560e01c806389c44cbb116100d6578063ce5db8d61161007f578063dcec334811610059578063dcec33481461049b578063e1a41bcf146104b0578063f4daa291146104c657600080fd5b8063ce5db8d614610445578063cf8e5cf01461045b578063d1de856c1461047b57600080fd5b8063a25ae557116100b0578063a25ae55714610391578063a8e4fb90146103ed578063bffa7f0f1461041a57600080fd5b806389c44cbb1461034857806393991af3146103685780639aaab6481461037e57600080fd5b806369f16eec1161013857806370872aa51161011257806370872aa5146102fc5780637f00642014610312578063887862721461033257600080fd5b806369f16eec146102a75780636abcf563146102bc5780636b4d98dd146102d157600080fd5b8063529933df11610169578063529933df146101ea578063534db0e2146101ff57806354fd4d501461025157600080fd5b80622134cc1461018f5780631c89c97d146101b35780634599c788146101d5575b600080fd5b34801561019b57600080fd5b506005545b6040519081526020015b60405180910390f35b3480156101bf57600080fd5b506101d36101ce3660046113a2565b6104db565b005b3480156101e157600080fd5b506101a06108b6565b3480156101f657600080fd5b506004546101a0565b34801561020b57600080fd5b5060065461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101aa565b34801561025d57600080fd5b5061029a6040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516101aa9190611405565b3480156102b357600080fd5b506101a0610929565b3480156102c857600080fd5b506003546101a0565b3480156102dd57600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561030857600080fd5b506101a060015481565b34801561031e57600080fd5b506101a061032d366004611478565b61093b565b34801561033e57600080fd5b506101a060025481565b34801561035457600080fd5b506101d3610363366004611478565b610b4f565b34801561037457600080fd5b506101a060055481565b6101d361038c366004611491565b610de9565b34801561039d57600080fd5b506103b16103ac366004611478565b61124a565b60408051825181526020808401516fffffffffffffffffffffffffffffffff9081169183019190915292820151909216908201526060016101aa565b3480156103f957600080fd5b5060075461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561042657600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561045157600080fd5b506101a060085481565b34801561046757600080fd5b506103b1610476366004611478565b6112de565b34801561048757600080fd5b506101a0610496366004611478565b611316565b3480156104a757600080fd5b506101a0611346565b3480156104bc57600080fd5b506101a060045481565b3480156104d257600080fd5b506008546101a0565b600054610100900460ff16158080156104fb5750600054600160ff909116105b806105155750303b158015610515575060005460ff166001145b6105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561060457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60008811610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e2030000000000000606482015260840161059d565b60008711610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e2030000000000000000000000000606482015260840161059d565b428511156107db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60048890556005879055600186905560028590556007805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556006805492861692909116919091179055600882905580156108ac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6003546000901561092057600380546108d1906001906114f2565b815481106108e1576108e1611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b600354600090610924906001906114f2565b60006109456108b6565b8211156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a40161059d565b600354610aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161059d565b6003546000905b80821015610b485760006002610acc8385611538565b610ad69190611550565b90508460038281548110610aec57610aec611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610b3e57610b37816001611538565b9250610b42565b8091505b50610ab6565b5092915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610bf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161059d565b6003548110610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60085460038281548110610cc357610cc3611509565b6000918252602090912060016002909202010154610cf3906fffffffffffffffffffffffffffffffff16426114f2565b10610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161059d565b6000610db160035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b610ebe611346565b8314610f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161059d565b42610f7c84611316565b10611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161059d565b83611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161059d565b81156111525781814014611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161059d565b8261115c60035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e24260405161118e91815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b60408051606081018252600080825260208201819052918101919091526003828154811061127a5761127a611509565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b604080516060810182526000808252602082018190529181019190915260036113068361093b565b8154811061127a5761127a611509565b60006005546001548361132991906114f2565b611333919061158b565b6002546113409190611538565b92915050565b60006004546113536108b6565b6109249190611538565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b803573ffffffffffffffffffffffffffffffffffffffff8116811461139d57600080fd5b919050565b600080600080600080600060e0888a0312156113bd57600080fd5b873596506020880135955060408801359450606088013593506113e260808901611379565b92506113f060a08901611379565b915060c0880135905092959891949750929550565b600060208083528351808285015260005b8181101561143257858101830151858201604001528201611416565b81811115611444576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561148a57600080fd5b5035919050565b600080600080608085870312156114a757600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611504576115046114c3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561154b5761154b6114c3565b500190565b600082611586577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156115c3576115c36114c3565b50029056fea164736f6c634300080f000a"; bytes internal constant systemConfigCode = hex"608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a"; bytes internal constant l1StandardBridgeCode = - hex"60806040526004361061019a5760003560e01c80635c975abb116100e1578063927ede2d1161008a578063b1a1a88211610064578063b1a1a88214610584578063c0c53b8b14610597578063c89701a2146105b7578063e11013dd146105e457600080fd5b8063927ede2d146105265780639a2ac6d514610551578063a9f9e6751461056457600080fd5b806387087623116100bb57806387087623146104c05780638f601f66146104e057806391c49bf81461047557600080fd5b80635c975abb146104605780637f46ddb214610475578063838b2520146104a057600080fd5b806335e80ab311610143578063540abf731161011d578063540abf73146103ca57806354fd4d50146103ea57806358a997f61461044057600080fd5b806335e80ab31461032d5780633cb747bf1461035a5780634397dfef1461038757600080fd5b80631635f5fd116101745780631635f5fd1461029e57806321326849146102b157806333d7e2bd146102db57600080fd5b80630166a07a1461025857806309fc8843146102785780631532ec341461028b57600080fd5b3661025357333b15610233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610251333362030d4060405180602001604052806000815250610613565b005b600080fd5b34801561026457600080fd5b50610251610273366004612973565b610626565b610251610286366004612a24565b610a40565b610251610299366004612a77565b610b17565b6102516102ac366004612a77565b610b2b565b3480156102bd57600080fd5b506102c6611089565b60405190151581526020015b60405180910390f35b3480156102e757600080fd5b506033546103089073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102d2565b34801561033957600080fd5b506032546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561036657600080fd5b506003546103089073ffffffffffffffffffffffffffffffffffffffff1681565b34801561039357600080fd5b5061039c6110c8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102d2565b3480156103d657600080fd5b506102516103e5366004612aea565b611165565b3480156103f657600080fd5b506104336040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102d29190612bd7565b34801561044c57600080fd5b5061025161045b366004612bea565b6111aa565b34801561046c57600080fd5b506102c661127e565b34801561048157600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff16610308565b3480156104ac57600080fd5b506102516104bb366004612aea565b611317565b3480156104cc57600080fd5b506102516104db366004612bea565b61135c565b3480156104ec57600080fd5b506105186104fb366004612c6d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102d2565b34801561053257600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610308565b61025161055f366004612ca6565b611430565b34801561057057600080fd5b5061025161057f366004612973565b611472565b610251610592366004612a24565b611481565b3480156105a357600080fd5b506102516105b2366004612d09565b611552565b3480156105c357600080fd5b506004546103089073ffffffffffffffffffffffffffffffffffffffff1681565b6102516105f2366004612ca6565b611751565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6106208484348585611794565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff16331480156106f9575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e19190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b6107ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b6107b361127e565b1561081a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610823876119f3565b15610971576108328787611a55565b6108e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561095457600080fd5b505af1158015610968573d6000803e3d6000fd5b505050506109f3565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109af908490612da0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109f3908585611b75565b610a37878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c4992505050565b50505050505050565b333b15610acf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b123333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b505050565b610b248585858585610b2b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610bfe575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610bc2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be69190612d54565b73ffffffffffffffffffffffffffffffffffffffff16145b610cb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a40161022a565b610cb861127e565b15610d1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a2070617573656400000000000000000000604482015260640161022a565b610d27611089565b15610db4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b823414610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e74207265717569726564000000000000606482015260840161022a565b3073ffffffffffffffffffffffffffffffffffffffff851603610ee8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c660000000000000000000000000000000000000000000000000000000000606482015260840161022a565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e676572000000000000000000000000000000000000000000000000606482015260840161022a565b610fd585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611cd792505050565b6000610ff2855a8660405180602001604052806000815250611d4a565b905080611081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c65640000000000000000000000000000000000000000000000000000000000606482015260840161022a565b505050505050565b6000806110946110c8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c9190612db7565b90939092509050565b610a3787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b333b15611239576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190612dec565b905090565b610a3787873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061208f92505050565b333b156113eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b61108186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611d6492505050565b61062033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b610a3787878787878787610626565b333b15611510576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f41000000000000000000606482015260840161022a565b610b1233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061061392505050565b600054610100900460ff16158080156115725750600054600160ff909116105b8061158c5750303b15801561158c575060005460ff166001145b611618576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161022a565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561167657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556116e98473420000000000000000000000000000000000001061209e565b801561062057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6106203385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061179492505050565b61179c611089565b15611829576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e000000000000000000606482015260840161022a565b8234146118b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c75650000606482015260840161022a565b6118c485858584612188565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611927908b908b9086908a90602401612e0e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b90921682526119ba92918890600401612e57565b6000604051808303818588803b1580156119d357600080fd5b505af11580156119e7573d6000803e3d6000fd5b50505050505050505050565b6000611a1f827f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b80611a4f5750611a4f827fec4fc8e3000000000000000000000000000000000000000000000000000000006121fb565b92915050565b6000611a81837f1d1d8b63000000000000000000000000000000000000000000000000000000006121fb565b15611b2a578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af59190612d54565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611a4f565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ad1573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b129084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261221e565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611cc193929190612e9c565b60405180910390a461108186868686868661232a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611d36929190612eda565b60405180910390a3610620848484846123b2565b600080600080845160208601878a8af19695505050505050565b611d6d876119f3565b15611ebb57611d7c8787611a55565b611e2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a40161022a565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e9e57600080fd5b505af1158015611eb2573d6000803e3d6000fd5b50505050611f4f565b611edd73ffffffffffffffffffffffffffffffffffffffff881686308661241f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611f1b908490612ef3565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611f5d87878787878661247d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611fc1908b908d908c908c908c908b90602401612f0b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b909216825261205492918790600401612e57565b600060405180830381600087803b15801561206e57600080fd5b505af1158015612082573d6000803e3d6000fd5b5050505050505050505050565b610a3787878787878787611d64565b600054610100900460ff16612135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161022a565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516121e7929190612eda565b60405180910390a36106208484848461250b565b60006122068361256a565b8015612217575061221783836125ce565b9392505050565b6000612280826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661269d9092919063ffffffff16565b805190915015610b12578080602001905181019061229e9190612dec565b610b12576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161022a565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516123a293929190612e9c565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612411929190612eda565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106209085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611bc7565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968686866040516124f593929190612e9c565b60405180910390a46110818686868686866126b4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612411929190612eda565b6000612596827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ce565b8015611a4f57506125c7827fffffffff000000000000000000000000000000000000000000000000000000006125ce565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612686575060208210155b80156126925750600081115b979650505050505050565b60606126ac848460008561272c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516123a293929190612e9c565b6060824710156127be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161022a565b73ffffffffffffffffffffffffffffffffffffffff85163b61283c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161022a565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128659190612f66565b60006040518083038185875af1925050503d80600081146128a2576040519150601f19603f3d011682016040523d82523d6000602084013e6128a7565b606091505b5091509150612692828286606083156128c1575081612217565b8251156128d15782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161022a9190612bd7565b73ffffffffffffffffffffffffffffffffffffffff8116811461292757600080fd5b50565b60008083601f84011261293c57600080fd5b50813567ffffffffffffffff81111561295457600080fd5b60208301915083602082850101111561296c57600080fd5b9250929050565b600080600080600080600060c0888a03121561298e57600080fd5b873561299981612905565b965060208801356129a981612905565b955060408801356129b981612905565b945060608801356129c981612905565b93506080880135925060a088013567ffffffffffffffff8111156129ec57600080fd5b6129f88a828b0161292a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a1f57600080fd5b919050565b600080600060408486031215612a3957600080fd5b612a4284612a0b565b9250602084013567ffffffffffffffff811115612a5e57600080fd5b612a6a8682870161292a565b9497909650939450505050565b600080600080600060808688031215612a8f57600080fd5b8535612a9a81612905565b94506020860135612aaa81612905565b935060408601359250606086013567ffffffffffffffff811115612acd57600080fd5b612ad98882890161292a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b0557600080fd5b8735612b1081612905565b96506020880135612b2081612905565b95506040880135612b3081612905565b945060608801359350612b4560808901612a0b565b925060a088013567ffffffffffffffff8111156129ec57600080fd5b60005b83811015612b7c578181015183820152602001612b64565b838111156106205750506000910152565b60008151808452612ba5816020860160208601612b61565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006122176020830184612b8d565b60008060008060008060a08789031215612c0357600080fd5b8635612c0e81612905565b95506020870135612c1e81612905565b945060408701359350612c3360608801612a0b565b9250608087013567ffffffffffffffff811115612c4f57600080fd5b612c5b89828a0161292a565b979a9699509497509295939492505050565b60008060408385031215612c8057600080fd5b8235612c8b81612905565b91506020830135612c9b81612905565b809150509250929050565b60008060008060608587031215612cbc57600080fd5b8435612cc781612905565b9350612cd560208601612a0b565b9250604085013567ffffffffffffffff811115612cf157600080fd5b612cfd8782880161292a565b95989497509550505050565b600080600060608486031215612d1e57600080fd5b8335612d2981612905565b92506020840135612d3981612905565b91506040840135612d4981612905565b809150509250925092565b600060208284031215612d6657600080fd5b815161221781612905565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612db257612db2612d71565b500390565b60008060408385031215612dca57600080fd5b8251612dd581612905565b602084015190925060ff81168114612c9b57600080fd5b600060208284031215612dfe57600080fd5b8151801515811461221757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e4d6080830184612b8d565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e866060830185612b8d565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ed16060830184612b8d565b95945050505050565b8281526040602082015260006126ac6040830184612b8d565b60008219821115612f0657612f06612d71565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f5a60c0830184612b8d565b98975050505050505050565b60008251612f78818460208701612b61565b919091019291505056fea164736f6c634300080f000a"; + hex"6080604052600436106101b05760003560e01c80635c975abb116100ec5780639a2ac6d51161008a578063c0c53b8b11610064578063c0c53b8b146105c2578063c89701a2146105e2578063d84447151461060f578063e11013dd1461062457600080fd5b80639a2ac6d51461057c578063a9f9e6751461058f578063b1a1a882146105af57600080fd5b806387087623116100c657806387087623146104eb5780638f601f661461050b57806391c49bf8146104a0578063927ede2d1461055157600080fd5b80635c975abb1461048b5780637f46ddb2146104a0578063838b2520146104cb57600080fd5b806335e80ab311610159578063540abf7311610133578063540abf73146103e057806354fd4d5014610400578063550fcdc91461045657806358a997f61461046b57600080fd5b806335e80ab3146103435780633cb747bf146103705780634397dfef1461039d57600080fd5b80631635f5fd1161018a5780631635f5fd146102b457806321326849146102c757806333d7e2bd146102f157600080fd5b80630166a07a1461026e57806309fc88431461028e5780631532ec34146102a157600080fd5b3661026957333b15610249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610267333362030d4060405180602001604052806000815250610653565b005b600080fd5b34801561027a57600080fd5b50610267610289366004612ad9565b610666565b61026761029c366004612b8a565b610a80565b6102676102af366004612bdd565b610b57565b6102676102c2366004612bdd565b610b6b565b3480156102d357600080fd5b506102dc6110c9565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5060335461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e8565b34801561034f57600080fd5b5060325461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037c57600080fd5b5060035461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103b2611108565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102e8565b3480156103ec57600080fd5b506102676103fb366004612c50565b6111a5565b34801561040c57600080fd5b506104496040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e89190612d3d565b34801561046257600080fd5b506104496111ea565b34801561047757600080fd5b50610267610486366004612d50565b6112a5565b34801561049757600080fd5b506102dc611379565b3480156104ac57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661031e565b3480156104d757600080fd5b506102676104e6366004612c50565b61140d565b3480156104f757600080fd5b50610267610506366004612d50565b611452565b34801561051757600080fd5b50610543610526366004612dd3565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e8565b34801561055d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661031e565b61026761058a366004612e0c565b611526565b34801561059b57600080fd5b506102676105aa366004612ad9565b611568565b6102676105bd366004612b8a565b611577565b3480156105ce57600080fd5b506102676105dd366004612e6f565b611648565b3480156105ee57600080fd5b5060045461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061b57600080fd5b50610449611847565b610267610632366004612e0c565b6118b7565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61066084843485856118fa565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610739575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107219190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b6107eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b6107f3611379565b1561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b61086387611b59565b156109b1576108728787611bbb565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050610a33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109ef908490612f06565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a33908585611cdb565b610a77878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611daf92505050565b50505050505050565b333b15610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b523333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b505050565b610b648585858585610b6b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c3e575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b610cf8611379565b15610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b610d676110c9565b15610df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610240565b3073ffffffffffffffffffffffffffffffffffffffff851603610f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610240565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610240565b61101585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3d92505050565b6000611032855a8660405180602001604052806000815250611eb0565b9050806110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610240565b505050505050565b6000806110d4611108565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612f1d565b90939092509050565b610a7787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b603354604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112a09190810190612f81565b905090565b333b15611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613041565b610a7787873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b333b156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b61066033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b610a7787878787878787610666565b333b15611606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b5233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b600054610100900460ff16158080156116685750600054600160ff909116105b806116825750303b158015611682575060005460ff166001145b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610240565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561176c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556117df84734200000000000000000000000000000000000010612204565b801561066057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b603354604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b6106603385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b6119026110c9565b1561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610240565b611a2a858585846122ee565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a8d908b908b9086908a90602401613063565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b20929188906004016130ac565b6000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050505050505050565b6000611b85827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80611bb55750611bb5827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b92915050565b6000611be7837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611c90578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611bb5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b529084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612384565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611e27939291906130f1565b60405180910390a46110c1868686868686612490565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e9c92919061312f565b60405180910390a361066084848484612518565b600080600080845160208601878a8af19695505050505050565b611ed387611b59565b1561202157611ee28787611bbb565b611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506120b5565b61204373ffffffffffffffffffffffffffffffffffffffff8816863086612585565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054612081908490613148565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6120c38787878787866125e3565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090612127908b908d908c908c908c908b90602401613160565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526121ba929187906004016130ac565b600060405180830381600087803b1580156121d457600080fd5b505af11580156121e8573d6000803e3d6000fd5b5050505050505050505050565b610a7787878787878787611eca565b600054610100900460ff1661229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610240565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161234d92919061312f565b60405180910390a361066084848484612671565b600061236c836126d0565b801561237d575061237d8383612734565b9392505050565b60006123e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128039092919063ffffffff16565b805190915015610b5257808060200190518101906124049190613041565b610b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610240565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051612508939291906130f1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161257792919061312f565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161265b939291906130f1565b60405180910390a46110c186868686868661281a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161257792919061312f565b60006126fc827f01ffc9a700000000000000000000000000000000000000000000000000000000612734565b8015611bb5575061272d827fffffffff00000000000000000000000000000000000000000000000000000000612734565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156127ec575060208210155b80156127f85750600081115b979650505050505050565b60606128128484600085612892565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051612508939291906130f1565b606082471015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610240565b73ffffffffffffffffffffffffffffffffffffffff85163b6129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610240565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129cb91906131bb565b60006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b50915091506127f882828660608315612a2757508161237d565b825115612a375782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102409190612d3d565b73ffffffffffffffffffffffffffffffffffffffff81168114612a8d57600080fd5b50565b60008083601f840112612aa257600080fd5b50813567ffffffffffffffff811115612aba57600080fd5b602083019150836020828501011115612ad257600080fd5b9250929050565b600080600080600080600060c0888a031215612af457600080fd5b8735612aff81612a6b565b96506020880135612b0f81612a6b565b95506040880135612b1f81612a6b565b94506060880135612b2f81612a6b565b93506080880135925060a088013567ffffffffffffffff811115612b5257600080fd5b612b5e8a828b01612a90565b989b979a50959850939692959293505050565b803563ffffffff81168114612b8557600080fd5b919050565b600080600060408486031215612b9f57600080fd5b612ba884612b71565b9250602084013567ffffffffffffffff811115612bc457600080fd5b612bd086828701612a90565b9497909650939450505050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612a6b565b94506020860135612c1081612a6b565b935060408601359250606086013567ffffffffffffffff811115612c3357600080fd5b612c3f88828901612a90565b969995985093965092949392505050565b600080600080600080600060c0888a031215612c6b57600080fd5b8735612c7681612a6b565b96506020880135612c8681612a6b565b95506040880135612c9681612a6b565b945060608801359350612cab60808901612b71565b925060a088013567ffffffffffffffff811115612b5257600080fd5b60005b83811015612ce2578181015183820152602001612cca565b838111156106605750506000910152565b60008151808452612d0b816020860160208601612cc7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184612cf3565b60008060008060008060a08789031215612d6957600080fd5b8635612d7481612a6b565b95506020870135612d8481612a6b565b945060408701359350612d9960608801612b71565b9250608087013567ffffffffffffffff811115612db557600080fd5b612dc189828a01612a90565b979a9699509497509295939492505050565b60008060408385031215612de657600080fd5b8235612df181612a6b565b91506020830135612e0181612a6b565b809150509250929050565b60008060008060608587031215612e2257600080fd5b8435612e2d81612a6b565b9350612e3b60208601612b71565b9250604085013567ffffffffffffffff811115612e5757600080fd5b612e6387828801612a90565b95989497509550505050565b600080600060608486031215612e8457600080fd5b8335612e8f81612a6b565b92506020840135612e9f81612a6b565b91506040840135612eaf81612a6b565b809150509250925092565b600060208284031215612ecc57600080fd5b815161237d81612a6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f1857612f18612ed7565b500390565b60008060408385031215612f3057600080fd5b8251612f3b81612a6b565b602084015190925060ff81168114612e0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f9357600080fd5b815167ffffffffffffffff80821115612fab57600080fd5b818401915084601f830112612fbf57600080fd5b815181811115612fd157612fd1612f52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561301757613017612f52565b8160405282815287602084870101111561303057600080fd5b6127f8836020830160208801612cc7565b60006020828403121561305357600080fd5b8151801515811461237d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130a26080830184612cf3565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130db6060830185612cf3565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006131266060830184612cf3565b95945050505050565b8281526040602082015260006128126040830184612cf3565b6000821982111561315b5761315b612ed7565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526131af60c0830184612cf3565b98975050505050505050565b600082516131cd818460208701612cc7565b919091019291505056fea164736f6c634300080f000a"; bytes internal constant l1ERC721BridgeCode = hex"608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a"; } diff --git a/packages/contracts-bedrock/test/universal/StandardBridge.t.sol b/packages/contracts-bedrock/test/universal/StandardBridge.t.sol index c09362fd6fb..3e1e3c1efbd 100644 --- a/packages/contracts-bedrock/test/universal/StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/universal/StandardBridge.t.sol @@ -25,6 +25,14 @@ contract StandardBridgeTester is StandardBridge { return (Constants.ETHER, 18); } + function gasPayingTokenName() public pure override returns (string memory) { + return "Ether"; + } + + function gasPayingTokenSymbol() public pure override returns (string memory) { + return "ETH"; + } + receive() external payable override { } } From c0e3fdd827145f186994a3cc1a8359771fe350af Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Mon, 22 Apr 2024 22:07:50 -0600 Subject: [PATCH 18/45] gas-snapshot: fix --- packages/contracts-bedrock/.gas-snapshot | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index cee1e5a1c5d..f2492dd48db 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -1,9 +1,9 @@ -GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 369376) -GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2967583) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 561991) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4073967) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 466919) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3512668) +GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 369211) +GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2967418) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 561814) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4073790) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 466811) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3512560) GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 72650) GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 92973) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 68431) From 4fd796143df5c3106f5bdb643f5c084ddc68572c Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 23 Apr 2024 15:52:06 -0600 Subject: [PATCH 19/45] contracts-bedrock: cleanup --- op-bindings/bindings/crossdomainmessenger.go | 127 +-------- .../bindings/l1crossdomainmessenger.go | 142 +---------- op-bindings/bindings/l1standardbridge.go | 142 +---------- .../bindings/l2crossdomainmessenger.go | 142 +---------- op-bindings/bindings/l2standardbridge.go | 142 +---------- op-bindings/bindings/standardbridge.go | 127 +-------- packages/contracts-bedrock/.gas-snapshot | 14 +- .../snapshots/abi/L1CrossDomainMessenger.json | 57 ----- .../snapshots/abi/L1StandardBridge.json | 57 ----- .../snapshots/abi/L2CrossDomainMessenger.json | 57 ----- .../snapshots/abi/L2StandardBridge.json | 57 ----- .../snapshots/state-diff/Kontrol-Deploy.json | 240 +++++++++--------- .../src/L1/L1CrossDomainMessenger.sol | 12 +- .../src/L1/L1StandardBridge.sol | 12 +- .../src/L2/L2CrossDomainMessenger.sol | 12 +- .../src/L2/L2StandardBridge.sol | 12 +- .../src/universal/CrossDomainMessenger.sol | 19 +- .../src/universal/StandardBridge.sol | 18 +- .../test/L1/L1CrossDomainMessenger.t.sol | 34 --- .../test/L1/L1StandardBridge.t.sol | 38 --- .../test/L2/L2CrossDomainMessenger.t.sol | 30 --- .../test/L2/L2StandardBridge.t.sol | 26 -- .../invariants/CrossDomainMessenger.t.sol | 2 - .../proofs/utils/DeploymentSummary.sol | 8 +- .../proofs/utils/DeploymentSummaryCode.sol | 4 +- .../test/universal/StandardBridge.t.sol | 10 +- 26 files changed, 158 insertions(+), 1383 deletions(-) diff --git a/op-bindings/bindings/crossdomainmessenger.go b/op-bindings/bindings/crossdomainmessenger.go index a4ba04ec103..516b49cbffa 100644 --- a/op-bindings/bindings/crossdomainmessenger.go +++ b/op-bindings/bindings/crossdomainmessenger.go @@ -30,7 +30,7 @@ var ( // CrossDomainMessengerMetaData contains all meta data concerning the CrossDomainMessenger contract. var CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", } // CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -520,131 +520,6 @@ func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) FailedMessages(a return _CrossDomainMessenger.Contract.FailedMessages(&_CrossDomainMessenger.CallOpts, arg0) } -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address, uint8) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) GasPayingToken(opts *bind.CallOpts) (common.Address, uint8, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "gasPayingToken") - - if err != nil { - return *new(common.Address), *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - out1 := *abi.ConvertType(out[1], new(uint8)).(*uint8) - - return out0, out1, err - -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address, uint8) -func (_CrossDomainMessenger *CrossDomainMessengerSession) GasPayingToken() (common.Address, uint8, error) { - return _CrossDomainMessenger.Contract.GasPayingToken(&_CrossDomainMessenger.CallOpts) -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address, uint8) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) GasPayingToken() (common.Address, uint8, error) { - return _CrossDomainMessenger.Contract.GasPayingToken(&_CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenName") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string) -func (_CrossDomainMessenger *CrossDomainMessengerSession) GasPayingTokenName() (string, error) { - return _CrossDomainMessenger.Contract.GasPayingTokenName(&_CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) GasPayingTokenName() (string, error) { - return _CrossDomainMessenger.Contract.GasPayingTokenName(&_CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenSymbol") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string) -func (_CrossDomainMessenger *CrossDomainMessengerSession) GasPayingTokenSymbol() (string, error) { - return _CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) GasPayingTokenSymbol() (string, error) { - return _CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_CrossDomainMessenger.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _CrossDomainMessenger.contract.Call(opts, &out, "isCustomGasToken") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerSession) IsCustomGasToken() (bool, error) { - return _CrossDomainMessenger.Contract.IsCustomGasToken(&_CrossDomainMessenger.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_CrossDomainMessenger *CrossDomainMessengerCallerSession) IsCustomGasToken() (bool, error) { - return _CrossDomainMessenger.Contract.IsCustomGasToken(&_CrossDomainMessenger.CallOpts) -} - // MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // // Solidity: function messageNonce() view returns(uint256) diff --git a/op-bindings/bindings/l1crossdomainmessenger.go b/op-bindings/bindings/l1crossdomainmessenger.go index a6bf19bc591..d8901d85ecc 100644 --- a/op-bindings/bindings/l1crossdomainmessenger.go +++ b/op-bindings/bindings/l1crossdomainmessenger.go @@ -30,8 +30,8 @@ var ( // L1CrossDomainMessengerMetaData contains all meta data concerning the L1CrossDomainMessenger contract. var L1CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PORTAL\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"_addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_portal\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620018671760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612471806200029e6000396000f3fe6080604052600436106101b75760003560e01c80635c975abb116100ec578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610534578063d844471514610547578063db505d801461055c578063ecc704281461058957600080fd5b8063b1b1b209146104c4578063b28ade25146104f4578063c0c53b8b1461051457600080fd5b806383a74074116100c657806383a74074146104525780638cbeeef2146103645780639fce812c14610469578063a4e7f8bd1461049457600080fd5b80635c975abb146103fb5780636425666b146104105780636e296e451461043d57600080fd5b80633dbb202b116101595780634c1d6a69116101335780634c1d6a691461036457806354fd4d501461037a578063550fcdc9146103d05780635644cfdf146103e557600080fd5b80633dbb202b146102e45780633f827a5a146102f95780634397dfef1461032157600080fd5b8063213268491161019557806321326849146102505780632828d7e81461027557806333d7e2bd1461028a57806335e80ab3146102b757600080fd5b8063028f85f7146101bc5780630c568498146101ef5780630ff754ea14610204575b600080fd5b3480156101c857600080fd5b506101d1601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506101d1603f81565b34801561021057600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b34801561025c57600080fd5b506102656105ee565b60405190151581526020016101e6565b34801561028157600080fd5b506101d1604081565b34801561029657600080fd5b5060fd5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102c357600080fd5b5060fb5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f76102f2366004611db3565b61062d565b005b34801561030557600080fd5b5061030e600181565b60405161ffff90911681526020016101e6565b34801561032d57600080fd5b5061033661092a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101e6565b34801561037057600080fd5b506101d1619c4081565b34801561038657600080fd5b506103c36040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101e69190611e90565b3480156103dc57600080fd5b506103c36109c7565b3480156103f157600080fd5b506101d161138881565b34801561040757600080fd5b50610265610a82565b34801561041c57600080fd5b5060fc5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044957600080fd5b5061022b610b16565b34801561045e57600080fd5b506101d162030d4081565b34801561047557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661022b565b3480156104a057600080fd5b506102656104af366004611eaa565b60ce6020526000908152604090205460ff1681565b3480156104d057600080fd5b506102656104df366004611eaa565b60cb6020526000908152604090205460ff1681565b34801561050057600080fd5b506101d161050f366004611ec3565b610bfd565b34801561052057600080fd5b506102f761052f366004611f17565b610c6b565b6102f7610542366004611f62565b610ee2565b34801561055357600080fd5b506103c36117f7565b34801561056857600080fd5b5060cf5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059557600080fd5b506105e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101e6565b6000806105f961092a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6106356105ee565b156106cd5734156106cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107ff9073ffffffffffffffffffffffffffffffffffffffff166106f5858585610bfd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061076160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161077d9796959493929190612031565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611883565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561088460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610896959493929190612090565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906120de565b90939092509050565b60fd54604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7d919081019061214d565b905090565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612218565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016106c4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610c19604063ffffffff8816612269565b610c239190612299565b610c2e601088612269565b610c3b9062030d406122e7565b610c4591906122e7565b610c4f91906122e7565b610c5991906122e7565b610c6391906122e7565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610cb6575060005460017401000000000000000000000000000000000000000090910460ff16105b80610ce85750303b158015610ce8575060005474010000000000000000000000000000000000000000900460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106c4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610dfa57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610e7973420000000000000000000000000000000000000761191c565b8015610edc57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610eea610a82565b15610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016106c4565b60f087901c6002811061100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016106c4565b8061ffff1660000361110157600061105d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611a58915050565b600081815260cb602052604090205490915060ff16156110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016106c4565b505b6000611147898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7792505050565b9050611151611a9a565b156111895785341461116557611165612313565b600081815260ce602052604090205460ff161561118457611184612313565b6112db565b341561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016106c4565b600081815260ce602052604090205460ff166112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016106c4565b6112e487611b76565b15611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016106c4565b600081815260cb602052604090205460ff1615611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016106c4565b61145785611448611388619c406122e7565b67ffffffffffffffff16611bbc565b158061147d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561159657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b50506117ee565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061162788619c405a6115ea9190612342565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bda92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156116dd57600082815260cb602052604090205460ff161561167a5761167a612313565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26117ea565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b5050505b50505050505050565b60fd54604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906118e4908890839089906000908990600401612359565b6000604051808303818588803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106c4565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611a115760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a6685858585611bf4565b805190602001209050949350505050565b6000611a87878787878787611c8d565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a7d575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a91906123a6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611bb6575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611c0d94939291906123c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611caa9695949392919061240d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d4e57600080fd5b50565b60008083601f840112611d6357600080fd5b50813567ffffffffffffffff811115611d7b57600080fd5b602083019150836020828501011115611d9357600080fd5b9250929050565b803563ffffffff81168114611dae57600080fd5b919050565b60008060008060608587031215611dc957600080fd5b8435611dd481611d2c565b9350602085013567ffffffffffffffff811115611df057600080fd5b611dfc87828801611d51565b9094509250611e0f905060408601611d9a565b905092959194509250565b60005b83811015611e35578181015183820152602001611e1d565b83811115610edc5750506000910152565b60008151808452611e5e816020860160208601611e1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ea36020830184611e46565b9392505050565b600060208284031215611ebc57600080fd5b5035919050565b600080600060408486031215611ed857600080fd5b833567ffffffffffffffff811115611eef57600080fd5b611efb86828701611d51565b9094509250611f0e905060208501611d9a565b90509250925092565b600080600060608486031215611f2c57600080fd5b8335611f3781611d2c565b92506020840135611f4781611d2c565b91506040840135611f5781611d2c565b809150509250925092565b600080600080600080600060c0888a031215611f7d57600080fd5b873596506020880135611f8f81611d2c565b95506040880135611f9f81611d2c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611fc957600080fd5b611fd58a828b01611d51565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261208360c083018486611fe8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c0608083018688611fe8565b905083604083015263ffffffff831660608301529695505050505050565b600080604083850312156120f157600080fd5b82516120fc81611d2c565b602084015190925060ff8116811461211357600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561215f57600080fd5b815167ffffffffffffffff8082111561217757600080fd5b818401915084601f83011261218b57600080fd5b81518181111561219d5761219d61211e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e361211e565b816040528281528760208487010111156121fc57600080fd5b61220d836020830160208801611e1a565b979650505050505050565b60006020828403121561222a57600080fd5b81518015158114611ea357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156122905761229061223a565b02949350505050565b600067ffffffffffffffff808416806122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561230a5761230a61223a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156123545761235461223a565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061220d60a0830184611e46565b6000602082840312156123b857600080fd5b8151611ea381611d2c565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526123fc6080830185611e46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261245860c0830184611e46565b9897505050505050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"PORTAL\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_portal\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"portal\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractOptimismPortal\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620015b71760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6121a3806200029e6000396000f3fe60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a", } // L1CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -573,144 +573,6 @@ func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) FailedMessag return _L1CrossDomainMessenger.Contract.FailedMessages(&_L1CrossDomainMessenger.CallOpts, arg0) } -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address _addr, uint8 _decimals) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) GasPayingToken(opts *bind.CallOpts) (struct { - Addr common.Address - Decimals uint8 -}, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "gasPayingToken") - - outstruct := new(struct { - Addr common.Address - Decimals uint8 - }) - if err != nil { - return *outstruct, err - } - - outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) - - return *outstruct, err - -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address _addr, uint8 _decimals) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) GasPayingToken() (struct { - Addr common.Address - Decimals uint8 -}, error) { - return _L1CrossDomainMessenger.Contract.GasPayingToken(&_L1CrossDomainMessenger.CallOpts) -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address _addr, uint8 _decimals) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) GasPayingToken() (struct { - Addr common.Address - Decimals uint8 -}, error) { - return _L1CrossDomainMessenger.Contract.GasPayingToken(&_L1CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenName") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) GasPayingTokenName() (string, error) { - return _L1CrossDomainMessenger.Contract.GasPayingTokenName(&_L1CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) GasPayingTokenName() (string, error) { - return _L1CrossDomainMessenger.Contract.GasPayingTokenName(&_L1CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenSymbol") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) GasPayingTokenSymbol() (string, error) { - return _L1CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_L1CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) GasPayingTokenSymbol() (string, error) { - return _L1CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_L1CrossDomainMessenger.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L1CrossDomainMessenger.contract.Call(opts, &out, "isCustomGasToken") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerSession) IsCustomGasToken() (bool, error) { - return _L1CrossDomainMessenger.Contract.IsCustomGasToken(&_L1CrossDomainMessenger.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L1CrossDomainMessenger *L1CrossDomainMessengerCallerSession) IsCustomGasToken() (bool, error) { - return _L1CrossDomainMessenger.Contract.IsCustomGasToken(&_L1CrossDomainMessenger.CallOpts) -} - // MessageNonce is a free data retrieval call binding the contract method 0xecc70428. // // Solidity: function messageNonce() view returns(uint256) diff --git a/op-bindings/bindings/l1standardbridge.go b/op-bindings/bindings/l1standardbridge.go index e4f06e816af..33708d8ad77 100644 --- a/op-bindings/bindings/l1standardbridge.go +++ b/op-bindings/bindings/l1standardbridge.go @@ -30,8 +30,8 @@ var ( // L1StandardBridgeMetaData contains all meta data concerning the L1StandardBridge contract. var L1StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositERC20\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositERC20To\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeERC20Withdrawal\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeETHWithdrawal\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_messenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20DepositInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20WithdrawalFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHDepositInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHWithdrawalFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620006371760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6131e4806200025b6000396000f3fe6080604052600436106101b05760003560e01c80635c975abb116100ec5780639a2ac6d51161008a578063c0c53b8b11610064578063c0c53b8b146105c2578063c89701a2146105e2578063d84447151461060f578063e11013dd1461062457600080fd5b80639a2ac6d51461057c578063a9f9e6751461058f578063b1a1a882146105af57600080fd5b806387087623116100c657806387087623146104eb5780638f601f661461050b57806391c49bf8146104a0578063927ede2d1461055157600080fd5b80635c975abb1461048b5780637f46ddb2146104a0578063838b2520146104cb57600080fd5b806335e80ab311610159578063540abf7311610133578063540abf73146103e057806354fd4d5014610400578063550fcdc91461045657806358a997f61461046b57600080fd5b806335e80ab3146103435780633cb747bf146103705780634397dfef1461039d57600080fd5b80631635f5fd1161018a5780631635f5fd146102b457806321326849146102c757806333d7e2bd146102f157600080fd5b80630166a07a1461026e57806309fc88431461028e5780631532ec34146102a157600080fd5b3661026957333b15610249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610267333362030d4060405180602001604052806000815250610653565b005b600080fd5b34801561027a57600080fd5b50610267610289366004612ad9565b610666565b61026761029c366004612b8a565b610a80565b6102676102af366004612bdd565b610b57565b6102676102c2366004612bdd565b610b6b565b3480156102d357600080fd5b506102dc6110c9565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5060335461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e8565b34801561034f57600080fd5b5060325461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037c57600080fd5b5060035461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103b2611108565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102e8565b3480156103ec57600080fd5b506102676103fb366004612c50565b6111a5565b34801561040c57600080fd5b506104496040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e89190612d3d565b34801561046257600080fd5b506104496111ea565b34801561047757600080fd5b50610267610486366004612d50565b6112a5565b34801561049757600080fd5b506102dc611379565b3480156104ac57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661031e565b3480156104d757600080fd5b506102676104e6366004612c50565b61140d565b3480156104f757600080fd5b50610267610506366004612d50565b611452565b34801561051757600080fd5b50610543610526366004612dd3565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e8565b34801561055d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661031e565b61026761058a366004612e0c565b611526565b34801561059b57600080fd5b506102676105aa366004612ad9565b611568565b6102676105bd366004612b8a565b611577565b3480156105ce57600080fd5b506102676105dd366004612e6f565b611648565b3480156105ee57600080fd5b5060045461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061b57600080fd5b50610449611847565b610267610632366004612e0c565b6118b7565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61066084843485856118fa565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610739575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107219190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b6107eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b6107f3611379565b1561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b61086387611b59565b156109b1576108728787611bbb565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050610a33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109ef908490612f06565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a33908585611cdb565b610a77878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611daf92505050565b50505050505050565b333b15610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b523333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b505050565b610b648585858585610b6b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c3e575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b610cf8611379565b15610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b610d676110c9565b15610df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610240565b3073ffffffffffffffffffffffffffffffffffffffff851603610f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610240565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610240565b61101585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3d92505050565b6000611032855a8660405180602001604052806000815250611eb0565b9050806110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610240565b505050505050565b6000806110d4611108565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612f1d565b90939092509050565b610a7787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b603354604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112a09190810190612f81565b905090565b333b15611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613041565b610a7787873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b333b156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b61066033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b610a7787878787878787610666565b333b15611606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b5233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b600054610100900460ff16158080156116685750600054600160ff909116105b806116825750303b158015611682575060005460ff166001145b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610240565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561176c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556117df84734200000000000000000000000000000000000010612204565b801561066057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b603354604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b6106603385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b6119026110c9565b1561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610240565b611a2a858585846122ee565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a8d908b908b9086908a90602401613063565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b20929188906004016130ac565b6000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050505050505050565b6000611b85827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80611bb55750611bb5827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b92915050565b6000611be7837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611c90578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611bb5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b529084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612384565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611e27939291906130f1565b60405180910390a46110c1868686868686612490565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e9c92919061312f565b60405180910390a361066084848484612518565b600080600080845160208601878a8af19695505050505050565b611ed387611b59565b1561202157611ee28787611bbb565b611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506120b5565b61204373ffffffffffffffffffffffffffffffffffffffff8816863086612585565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054612081908490613148565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6120c38787878787866125e3565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090612127908b908d908c908c908c908b90602401613160565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526121ba929187906004016130ac565b600060405180830381600087803b1580156121d457600080fd5b505af11580156121e8573d6000803e3d6000fd5b5050505050505050505050565b610a7787878787878787611eca565b600054610100900460ff1661229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610240565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161234d92919061312f565b60405180910390a361066084848484612671565b600061236c836126d0565b801561237d575061237d8383612734565b9392505050565b60006123e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128039092919063ffffffff16565b805190915015610b5257808060200190518101906124049190613041565b610b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610240565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051612508939291906130f1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161257792919061312f565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161265b939291906130f1565b60405180910390a46110c186868686868661281a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161257792919061312f565b60006126fc827f01ffc9a700000000000000000000000000000000000000000000000000000000612734565b8015611bb5575061272d827fffffffff00000000000000000000000000000000000000000000000000000000612734565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156127ec575060208210155b80156127f85750600081115b979650505050505050565b60606128128484600085612892565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051612508939291906130f1565b606082471015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610240565b73ffffffffffffffffffffffffffffffffffffffff85163b6129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610240565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129cb91906131bb565b60006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b50915091506127f882828660608315612a2757508161237d565b825115612a375782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102409190612d3d565b73ffffffffffffffffffffffffffffffffffffffff81168114612a8d57600080fd5b50565b60008083601f840112612aa257600080fd5b50813567ffffffffffffffff811115612aba57600080fd5b602083019150836020828501011115612ad257600080fd5b9250929050565b600080600080600080600060c0888a031215612af457600080fd5b8735612aff81612a6b565b96506020880135612b0f81612a6b565b95506040880135612b1f81612a6b565b94506060880135612b2f81612a6b565b93506080880135925060a088013567ffffffffffffffff811115612b5257600080fd5b612b5e8a828b01612a90565b989b979a50959850939692959293505050565b803563ffffffff81168114612b8557600080fd5b919050565b600080600060408486031215612b9f57600080fd5b612ba884612b71565b9250602084013567ffffffffffffffff811115612bc457600080fd5b612bd086828701612a90565b9497909650939450505050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612a6b565b94506020860135612c1081612a6b565b935060408601359250606086013567ffffffffffffffff811115612c3357600080fd5b612c3f88828901612a90565b969995985093965092949392505050565b600080600080600080600060c0888a031215612c6b57600080fd5b8735612c7681612a6b565b96506020880135612c8681612a6b565b95506040880135612c9681612a6b565b945060608801359350612cab60808901612b71565b925060a088013567ffffffffffffffff811115612b5257600080fd5b60005b83811015612ce2578181015183820152602001612cca565b838111156106605750506000910152565b60008151808452612d0b816020860160208601612cc7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184612cf3565b60008060008060008060a08789031215612d6957600080fd5b8635612d7481612a6b565b95506020870135612d8481612a6b565b945060408701359350612d9960608801612b71565b9250608087013567ffffffffffffffff811115612db557600080fd5b612dc189828a01612a90565b979a9699509497509295939492505050565b60008060408385031215612de657600080fd5b8235612df181612a6b565b91506020830135612e0181612a6b565b809150509250929050565b60008060008060608587031215612e2257600080fd5b8435612e2d81612a6b565b9350612e3b60208601612b71565b9250604085013567ffffffffffffffff811115612e5757600080fd5b612e6387828801612a90565b95989497509550505050565b600080600060608486031215612e8457600080fd5b8335612e8f81612a6b565b92506020840135612e9f81612a6b565b91506040840135612eaf81612a6b565b809150509250925092565b600060208284031215612ecc57600080fd5b815161237d81612a6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f1857612f18612ed7565b500390565b60008060408385031215612f3057600080fd5b8251612f3b81612a6b565b602084015190925060ff81168114612e0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f9357600080fd5b815167ffffffffffffffff80821115612fab57600080fd5b818401915084601f830112612fbf57600080fd5b815181811115612fd157612fd1612f52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561301757613017612f52565b8160405282815287602084870101111561303057600080fd5b6127f8836020830160208801612cc7565b60006020828403121561305357600080fd5b8151801515811461237d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130a26080830184612cf3565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130db6060830185612cf3565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006131266060830184612cf3565b95945050505050565b8281526040602082015260006128126040830184612cf3565b6000821982111561315b5761315b612ed7565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526131af60c0830184612cf3565b98975050505050505050565b600082516131cd818460208701612cc7565b919091019291505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositERC20\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositERC20To\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"depositETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeERC20Withdrawal\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeETHWithdrawal\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_messenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l2TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20DepositInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20WithdrawalFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHDepositInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHWithdrawalFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f21806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", } // L1StandardBridgeABI is the input ABI used to generate the binding from. @@ -294,144 +294,6 @@ func (_L1StandardBridge *L1StandardBridgeCallerSession) Deposits(arg0 common.Add return _L1StandardBridge.Contract.Deposits(&_L1StandardBridge.CallOpts, arg0, arg1) } -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_L1StandardBridge *L1StandardBridgeCaller) GasPayingToken(opts *bind.CallOpts) (struct { - Addr common.Address - Decimals uint8 -}, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "gasPayingToken") - - outstruct := new(struct { - Addr common.Address - Decimals uint8 - }) - if err != nil { - return *outstruct, err - } - - outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) - - return *outstruct, err - -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_L1StandardBridge *L1StandardBridgeSession) GasPayingToken() (struct { - Addr common.Address - Decimals uint8 -}, error) { - return _L1StandardBridge.Contract.GasPayingToken(&_L1StandardBridge.CallOpts) -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_L1StandardBridge *L1StandardBridgeCallerSession) GasPayingToken() (struct { - Addr common.Address - Decimals uint8 -}, error) { - return _L1StandardBridge.Contract.GasPayingToken(&_L1StandardBridge.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L1StandardBridge *L1StandardBridgeCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "gasPayingTokenName") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L1StandardBridge *L1StandardBridgeSession) GasPayingTokenName() (string, error) { - return _L1StandardBridge.Contract.GasPayingTokenName(&_L1StandardBridge.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L1StandardBridge *L1StandardBridgeCallerSession) GasPayingTokenName() (string, error) { - return _L1StandardBridge.Contract.GasPayingTokenName(&_L1StandardBridge.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L1StandardBridge *L1StandardBridgeCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "gasPayingTokenSymbol") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L1StandardBridge *L1StandardBridgeSession) GasPayingTokenSymbol() (string, error) { - return _L1StandardBridge.Contract.GasPayingTokenSymbol(&_L1StandardBridge.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L1StandardBridge *L1StandardBridgeCallerSession) GasPayingTokenSymbol() (string, error) { - return _L1StandardBridge.Contract.GasPayingTokenSymbol(&_L1StandardBridge.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L1StandardBridge *L1StandardBridgeCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L1StandardBridge.contract.Call(opts, &out, "isCustomGasToken") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L1StandardBridge *L1StandardBridgeSession) IsCustomGasToken() (bool, error) { - return _L1StandardBridge.Contract.IsCustomGasToken(&_L1StandardBridge.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L1StandardBridge *L1StandardBridgeCallerSession) IsCustomGasToken() (bool, error) { - return _L1StandardBridge.Contract.IsCustomGasToken(&_L1StandardBridge.CallOpts) -} - // L2TokenBridge is a free data retrieval call binding the contract method 0x91c49bf8. // // Solidity: function l2TokenBridge() view returns(address) diff --git a/op-bindings/bindings/l2crossdomainmessenger.go b/op-bindings/bindings/l2crossdomainmessenger.go index 033b5b06c1e..f907dc053af 100644 --- a/op-bindings/bindings/l2crossdomainmessenger.go +++ b/op-bindings/bindings/l2crossdomainmessenger.go @@ -30,8 +30,8 @@ var ( // L2CrossDomainMessengerMetaData contains all meta data concerning the L2CrossDomainMessenger contract. var L2CrossDomainMessengerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000239565b600054600160a81b900460ff16158080156200004d57506000546001600160a01b90910460ff16105b806200008457506200006a306200017360201b6200162e1760201c565b158015620000845750600054600160a01b900460ff166001145b620000ed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011b576000805460ff60a81b1916600160a81b1790555b620001268262000182565b80156200016f576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e4565b60cc546001600160a01b0316620002175760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6120f280620002496000396000f3fe6080604052600436106101965760003560e01c80636e296e45116100e1578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610464578063d844471514610477578063db505d801461048c578063ecc70428146104b957600080fd5b8063b1b1b209146103f4578063b28ade2514610424578063c4d66de81461044457600080fd5b80639fce812c116100bb5780639fce812c14610399578063a4e7f8bd146103c4578063a71198691461039957600080fd5b80636e296e451461034857806383a74074146103825780638cbeeef21461029d57600080fd5b80634397dfef11610143578063550fcdc91161011d578063550fcdc9146103095780635644cfdf1461031e5780635c975abb1461033457600080fd5b80634397dfef1461025a5780634c1d6a691461029d57806354fd4d50146102b357600080fd5b80632828d7e8116101745780632828d7e8146102085780633dbb202b1461021d5780633f827a5a1461023257600080fd5b8063028f85f71461019b5780630c568498146101ce57806321326849146101e3575b600080fd5b3480156101a757600080fd5b506101b0601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101da57600080fd5b506101b0603f81565b3480156101ef57600080fd5b506101f861051e565b60405190151581526020016101c5565b34801561021457600080fd5b506101b0604081565b61023061022b366004611aa2565b61055d565b005b34801561023e57600080fd5b50610247600181565b60405161ffff90911681526020016101c5565b34801561026657600080fd5b5061026f61085a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101c5565b3480156102a957600080fd5b506101b0619c4081565b3480156102bf57600080fd5b506102fc6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101c59190611b83565b34801561031557600080fd5b506102fc6108e8565b34801561032a57600080fd5b506101b061138881565b34801561034057600080fd5b5060006101f8565b34801561035457600080fd5b5061035d610994565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c5565b34801561038e57600080fd5b506101b062030d4081565b3480156103a557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661035d565b3480156103d057600080fd5b506101f86103df366004611b9d565b60ce6020526000908152604090205460ff1681565b34801561040057600080fd5b506101f861040f366004611b9d565b60cb6020526000908152604090205460ff1681565b34801561043057600080fd5b506101b061043f366004611bb6565b610a7b565b34801561045057600080fd5b5061023061045f366004611c0a565b610ae9565b610230610472366004611c27565b610ce8565b34801561048357600080fd5b506102fc6115cd565b34801561049857600080fd5b5060cf5461035d9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104c557600080fd5b5061051060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101c5565b60008061052961085a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b61056561051e565b156105fd5734156105fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf5461072f9073ffffffffffffffffffffffffffffffffffffffff16610625858585610a7b565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061069160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106ad9796959493929190611cf6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915261164a565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856107b460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107c6959493929190611d55565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190611da3565b90939092509050565b606073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663550fcdc96040518163ffffffff1660e01b8152600401600060405180830381865afa158015610949573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261098f9190810190611e12565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610a5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105f4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610a97604063ffffffff8816611f0c565b610aa19190611f3c565b610aac601088611f0c565b610ab99062030d40611f8a565b610ac39190611f8a565b610acd9190611f8a565b610ad79190611f8a565b610ae19190611f8a565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610b34575060005460017401000000000000000000000000000000000000000090910460ff16105b80610b665750303b158015610b66575060005474010000000000000000000000000000000000000000900460ff166001145b610bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105f4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610c7857600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610c81826116d8565b8015610ce457600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610da3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105f4565b8061ffff16600003610e98576000610df4878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611814915050565b600081815260cb602052604090205490915060ff1615610e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105f4565b505b6000610ede898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183392505050565b9050610f2760cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610f5f57853414610f3b57610f3b611fb6565b600081815260ce602052604090205460ff1615610f5a57610f5a611fb6565b6110b1565b3415611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105f4565b600081815260ce602052604090205460ff166110b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105f4565b6110ba87611856565b1561116d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105f4565b600081815260cb602052604090205460ff161561120c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105f4565b61122d8561121e611388619c40611f8a565b67ffffffffffffffff166118ab565b1580611253575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561136c57600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105f4565b50506115c4565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113fd88619c405a6113c09190611fe5565b8988888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118c992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156114b357600082815260cb602052604090205460ff161561145057611450611fb6565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115c0565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105f4565b5050505b50505050505050565b606073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663d84447156040518163ffffffff1660e01b8152600401600060405180830381865afa158015610949573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac9084906116a090889088908790600401611ffc565b6000604051808303818588803b1580156116b957600080fd5b505af11580156116cd573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105f4565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117cd5760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611822858585856118e3565b805190602001209050949350505050565b600061184387878787878761197c565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82163014806118a5575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b6060848484846040516024016118fc9493929190612044565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60608686868686866040516024016119999695949392919061208e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611a3d57600080fd5b50565b60008083601f840112611a5257600080fd5b50813567ffffffffffffffff811115611a6a57600080fd5b602083019150836020828501011115611a8257600080fd5b9250929050565b803563ffffffff81168114611a9d57600080fd5b919050565b60008060008060608587031215611ab857600080fd5b8435611ac381611a1b565b9350602085013567ffffffffffffffff811115611adf57600080fd5b611aeb87828801611a40565b9094509250611afe905060408601611a89565b905092959194509250565b60005b83811015611b24578181015183820152602001611b0c565b83811115611b33576000848401525b50505050565b60008151808452611b51816020860160208601611b09565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611b966020830184611b39565b9392505050565b600060208284031215611baf57600080fd5b5035919050565b600080600060408486031215611bcb57600080fd5b833567ffffffffffffffff811115611be257600080fd5b611bee86828701611a40565b9094509250611c01905060208501611a89565b90509250925092565b600060208284031215611c1c57600080fd5b8135611b9681611a1b565b600080600080600080600060c0888a031215611c4257600080fd5b873596506020880135611c5481611a1b565b95506040880135611c6481611a1b565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611c8e57600080fd5b611c9a8a828b01611a40565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611d4860c083018486611cad565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611d85608083018688611cad565b905083604083015263ffffffff831660608301529695505050505050565b60008060408385031215611db657600080fd5b8251611dc181611a1b565b602084015190925060ff81168114611dd857600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215611e2457600080fd5b815167ffffffffffffffff80821115611e3c57600080fd5b818401915084601f830112611e5057600080fd5b815181811115611e6257611e62611de3565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611ea857611ea8611de3565b81604052828152876020848701011115611ec157600080fd5b611ed2836020830160208801611b09565b979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f3357611f33611edd565b02949350505050565b600067ffffffffffffffff80841680611f7e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611fad57611fad611edd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611ff757611ff7611edd565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff8316602082015260606040820152600061203b6060830184611b39565b95945050505050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261207d6080830185611b39565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526120d960c0830184611b39565b9897505050505050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"MESSAGE_VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_CALLDATA_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_DENOMINATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MIN_GAS_DYNAMIC_OVERHEAD_NUMERATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CALL_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_CONSTANT_OVERHEAD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_GAS_CHECK_BUFFER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"RELAY_RESERVED_GAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"baseGas\",\"inputs\":[{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"failedMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messageNonce\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"relayMessage\",\"inputs\":[{\"name\":\"_nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"sendMessage\",\"inputs\":[{\"name\":\"_target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_message\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"successfulMessages\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"xDomainMessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"FailedRelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RelayedMessage\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessage\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sender\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"message\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"messageNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SentMessageExtension1\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000239565b600054600160a81b900460ff16158080156200004d57506000546001600160a01b90910460ff16105b806200008457506200006a306200017360201b620013a21760201c565b158015620000845750600054600160a01b900460ff166001145b620000ed5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011b576000805460ff60a81b1916600160a81b1790555b620001268262000182565b80156200016f576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620001f15760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e4565b60cc546001600160a01b0316620002175760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b611e2a80620002496000396000f3fe60806040526004361061016a5760003560e01c806383a74074116100cb578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b146103c7578063db505d80146103da578063ecc704281461040757600080fd5b8063b1b1b20914610357578063b28ade2514610387578063c4d66de8146103a757600080fd5b80639fce812c116100b05780639fce812c146102fc578063a4e7f8bd14610327578063a7119869146102fc57600080fd5b806383a74074146102e55780638cbeeef21461020957600080fd5b80634c1d6a69116101225780635644cfdf116101075780635644cfdf146102755780635c975abb1461028b5780636e296e45146102ab57600080fd5b80634c1d6a691461020957806354fd4d501461021f57600080fd5b80632828d7e8116101535780632828d7e8146101b75780633dbb202b146101cc5780633f827a5a146101e157600080fd5b8063028f85f71461016f5780630c568498146101a2575b600080fd5b34801561017b57600080fd5b50610184601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101ae57600080fd5b50610184603f81565b3480156101c357600080fd5b50610184604081565b6101df6101da3660046118e3565b61046c565b005b3480156101ed57600080fd5b506101f6600181565b60405161ffff9091168152602001610199565b34801561021557600080fd5b50610184619c4081565b34801561022b57600080fd5b506102686040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b60405161019991906119b5565b34801561028157600080fd5b5061018461138881565b34801561029757600080fd5b5060005b6040519015158152602001610199565b3480156102b757600080fd5b506102c0610769565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610199565b3480156102f157600080fd5b5061018462030d4081565b34801561030857600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166102c0565b34801561033357600080fd5b5061029b6103423660046119cf565b60ce6020526000908152604090205460ff1681565b34801561036357600080fd5b5061029b6103723660046119cf565b60cb6020526000908152604090205460ff1681565b34801561039357600080fd5b506101846103a23660046119e8565b610850565b3480156103b357600080fd5b506101df6103c2366004611a3c565b6108be565b6101df6103d5366004611a59565b610abd565b3480156103e657600080fd5b5060cf546102c09073ffffffffffffffffffffffffffffffffffffffff1681565b34801561041357600080fd5b5061045e60cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b604051908152602001610199565b6104746113be565b1561050c57341561050c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf5461063e9073ffffffffffffffffffffffffffffffffffffffff16610534858585610850565b347fd764ad0b000000000000000000000000000000000000000000000000000000006105a060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016105bc9796959493929190611b28565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526113fd565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a3385856106c360cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516106d5959493929190611b87565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f742073657400000000000000000000006064820152608401610503565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f61086c604063ffffffff8816611c04565b6108769190611c34565b610881601088611c04565b61088e9062030d40611c82565b6108989190611c82565b6108a29190611c82565b6108ac9190611c82565b6108b69190611c82565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610909575060005460017401000000000000000000000000000000000000000090910460ff16105b8061093b5750303b15801561093b575060005474010000000000000000000000000000000000000000900460ff166001145b6109c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610503565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610a4d57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b610a568261148b565b8015610ab957600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b60f087901c60028110610b78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a401610503565b8061ffff16600003610c6d576000610bc9878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506115c7915050565b600081815260cb602052604090205490915060ff1615610c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c617965640000000000000000006064820152608401610503565b505b6000610cb3898989898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115e692505050565b9050610cfc60cf54337fffffffffffffffffffffffffeeeeffffffffffffffffffffffffffffffffeeef0173ffffffffffffffffffffffffffffffffffffffff90811691161490565b15610d3457853414610d1057610d10611cae565b600081815260ce602052604090205460ff1615610d2f57610d2f611cae565b610e86565b3415610de8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a401610503565b600081815260ce602052604090205460ff16610e86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c61796564000000000000000000000000000000006064820152608401610503565b610e8f87611609565b15610f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a401610503565b600081815260cb602052604090205460ff1615610fe1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c61796564000000000000000000006064820152608401610503565b61100285610ff3611388619c40611c82565b67ffffffffffffffff1661165e565b1580611028575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561114157600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161113a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610503565b5050611399565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006111d288619c405a6111959190611cdd565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061167c92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561128857600082815260cb602052604090205460ff161561122557611225611cae565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a2611395565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3201611395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d657373616765000000000000000000000000000000000000006064820152608401610503565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806113c9611696565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6040517fc2b3e5ac0000000000000000000000000000000000000000000000000000000081527342000000000000000000000000000000000000169063c2b3e5ac90849061145390889088908790600401611cf4565b6000604051808303818588803b15801561146c57600080fd5b505af1158015611480573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610503565b60cc5473ffffffffffffffffffffffffffffffffffffffff166115805760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006115d585858585611724565b805190602001209050949350505050565b60006115f68787878787876117bd565b8051906020012090509695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611658575073ffffffffffffffffffffffffffffffffffffffff8216734200000000000000000000000000000000000016145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b9190611d3c565b90939092509050565b60608484848460405160240161173d9493929190611d7c565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b60608686868686866040516024016117da96959493929190611dc6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461187e57600080fd5b50565b60008083601f84011261189357600080fd5b50813567ffffffffffffffff8111156118ab57600080fd5b6020830191508360208285010111156118c357600080fd5b9250929050565b803563ffffffff811681146118de57600080fd5b919050565b600080600080606085870312156118f957600080fd5b84356119048161185c565b9350602085013567ffffffffffffffff81111561192057600080fd5b61192c87828801611881565b909450925061193f9050604086016118ca565b905092959194509250565b6000815180845260005b8181101561197057602081850181015186830182015201611954565b81811115611982576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119c8602083018461194a565b9392505050565b6000602082840312156119e157600080fd5b5035919050565b6000806000604084860312156119fd57600080fd5b833567ffffffffffffffff811115611a1457600080fd5b611a2086828701611881565b9094509250611a339050602085016118ca565b90509250925092565b600060208284031215611a4e57600080fd5b81356119c88161185c565b600080600080600080600060c0888a031215611a7457600080fd5b873596506020880135611a868161185c565b95506040880135611a968161185c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611ac057600080fd5b611acc8a828b01611881565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611b7a60c083018486611adf565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611bb7608083018688611adf565b905083604083015263ffffffff831660608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611c2b57611c2b611bd5565b02949350505050565b600067ffffffffffffffff80841680611c76577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ca557611ca5611bd5565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600082821015611cef57611cef611bd5565b500390565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff83166020820152606060408201526000611d33606083018461194a565b95945050505050565b60008060408385031215611d4f57600080fd5b8251611d5a8161185c565b602084015190925060ff81168114611d7157600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060806040830152611db5608083018561194a565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152611e1160c083018461194a565b9897505050505050505056fea164736f6c634300080f000a", } // L2CrossDomainMessengerABI is the input ABI used to generate the binding from. @@ -542,144 +542,6 @@ func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) FailedMessag return _L2CrossDomainMessenger.Contract.FailedMessages(&_L2CrossDomainMessenger.CallOpts, arg0) } -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) GasPayingToken(opts *bind.CallOpts) (struct { - Addr common.Address - Decimals uint8 -}, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "gasPayingToken") - - outstruct := new(struct { - Addr common.Address - Decimals uint8 - }) - if err != nil { - return *outstruct, err - } - - outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) - - return *outstruct, err - -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) GasPayingToken() (struct { - Addr common.Address - Decimals uint8 -}, error) { - return _L2CrossDomainMessenger.Contract.GasPayingToken(&_L2CrossDomainMessenger.CallOpts) -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) GasPayingToken() (struct { - Addr common.Address - Decimals uint8 -}, error) { - return _L2CrossDomainMessenger.Contract.GasPayingToken(&_L2CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenName") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) GasPayingTokenName() (string, error) { - return _L2CrossDomainMessenger.Contract.GasPayingTokenName(&_L2CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) GasPayingTokenName() (string, error) { - return _L2CrossDomainMessenger.Contract.GasPayingTokenName(&_L2CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "gasPayingTokenSymbol") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) GasPayingTokenSymbol() (string, error) { - return _L2CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_L2CrossDomainMessenger.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) GasPayingTokenSymbol() (string, error) { - return _L2CrossDomainMessenger.Contract.GasPayingTokenSymbol(&_L2CrossDomainMessenger.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L2CrossDomainMessenger.contract.Call(opts, &out, "isCustomGasToken") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerSession) IsCustomGasToken() (bool, error) { - return _L2CrossDomainMessenger.Contract.IsCustomGasToken(&_L2CrossDomainMessenger.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L2CrossDomainMessenger *L2CrossDomainMessengerCallerSession) IsCustomGasToken() (bool, error) { - return _L2CrossDomainMessenger.Contract.IsCustomGasToken(&_L2CrossDomainMessenger.CallOpts) -} - // L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // // Solidity: function l1CrossDomainMessenger() view returns(address) diff --git a/op-bindings/bindings/l2standardbridge.go b/op-bindings/bindings/l2standardbridge.go index 90c3e52af19..f303cfb1eab 100644 --- a/op-bindings/bindings/l2standardbridge.go +++ b/op-bindings/bindings/l2standardbridge.go @@ -30,8 +30,8 @@ var ( // L2StandardBridgeMetaData contains all meta data concerning the L2StandardBridge contract. var L2StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeDeposit\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_otherBridge\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdrawTo\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"DepositFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b620005571760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f8180620002276000396000f3fe6080604052600436106101795760003560e01c80635c975abb116100cb578063927ede2d1161007f578063c89701a211610059578063c89701a214610502578063d84447151461052f578063e11013dd1461054457600080fd5b8063927ede2d146104a4578063a3a79548146104cf578063c4d66de8146104e257600080fd5b80637f46ddb2116100b05780637f46ddb2146102d0578063870876231461043e5780638f601f661461045e57600080fd5b80635c975abb14610417578063662a633a1461042b57600080fd5b806336c717c11161012d578063540abf7311610107578063540abf731461038c57806354fd4d50146103ac578063550fcdc91461040257600080fd5b806336c717c1146102d05780633cb747bf1461031c5780634397dfef1461034957600080fd5b80631635f5fd1161015e5780631635f5fd14610280578063213268491461029357806332b7006d146102bd57600080fd5b80630166a07a1461024d57806309fc88431461026d57600080fd5b3661024857333b15610212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61024673deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d4060405180602001604052806000815250610573565b005b600080fd5b34801561025957600080fd5b50610246610268366004612850565b61064e565b61024661027b366004612901565b6109f0565b61024661028e366004612954565b610ac7565b34801561029f57600080fd5b506102a8610fae565b60405190151581526020015b60405180910390f35b6102466102cb3660046129c7565b610fed565b3480156102dc57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102b4565b34801561032857600080fd5b506003546102f79073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035557600080fd5b5061035e6110c7565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102b4565b34801561039857600080fd5b506102466103a7366004612a1b565b611155565b3480156103b857600080fd5b506103f56040518060400160405280601b81526020017f312e392e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102b49190612b08565b34801561040e57600080fd5b506103f561119a565b34801561042357600080fd5b5060006102a8565b610246610439366004612850565b611246565b34801561044a57600080fd5b50610246610459366004612b1b565b6112b9565b34801561046a57600080fd5b50610496610479366004612b9e565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102b4565b3480156104b057600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102f7565b6102466104dd366004612b1b565b61138d565b3480156104ee57600080fd5b506102466104fd366004612bd7565b6113d1565b34801561050e57600080fd5b506004546102f79073ffffffffffffffffffffffffffffffffffffffff1681565b34801561053b57600080fd5b506103f561157a565b610246610552366004612bf4565b6115db565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016105c2576105bd8585858585611624565b610646565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa15801561060f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106339190612c57565b905061064487828888888888611883565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610721575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107099190612c57565b73ffffffffffffffffffffffffffffffffffffffff16145b6107d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b6107dc87611bae565b1561092a576107eb8787611c10565b61089d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561090d57600080fd5b505af1158015610921573d6000803e3d6000fd5b505050506109ac565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610968908490612ca3565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556109ac908585611d30565b610644878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e0492505050565b333b15610a7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b610ac23333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061162492505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b9a575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b829190612c57565b73ffffffffffffffffffffffffffffffffffffffff16145b610c4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610209565b610c54610fae565b15610ce1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610209565b823414610d70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610209565b3073ffffffffffffffffffffffffffffffffffffffff851603610e15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610209565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610ec0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610209565b610f0285858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e9292505050565b6000610f1f855a8660405180602001604052806000815250611f33565b905080610646576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610209565b600080610fb96110c7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b333b1561107c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b6110c0853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061057392505050565b5050505050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa158015611128573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114c9190612cba565b90939092509050565b61064487873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061188392505050565b606073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663550fcdc96040518163ffffffff1660e01b8152600401600060405180830381865afa1580156111fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112419190810190612d1e565b905090565b73ffffffffffffffffffffffffffffffffffffffff8716158015611293575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b156112aa576112a58585858585610ac7565b610644565b6106448688878787878761064e565b333b15611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610209565b61064686863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061188392505050565b610646863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061057392505050565b600054610100900460ff16158080156113f15750600054600160ff909116105b8061140b5750303b15801561140b575060005460ff166001145b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610209565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156114f557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b61151373420000000000000000000000000000000000000783611f4d565b801561157657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b606073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff1663d84447156040518163ffffffff1660e01b8152600401600060405180830381865afa1580156111fb573d6000803e3d6000fd5b61161e3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061162492505050565b50505050565b61162c610fae565b156116b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610209565b823414611748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610209565b61175485858584612037565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117b7908b908b9086908a90602401612dde565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261184a92918890600401612e27565b6000604051808303818588803b15801561186357600080fd5b505af1158015611877573d6000803e3d6000fd5b50505050505050505050565b61188c87611bae565b156119da5761189b8787611c10565b61194d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610209565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b1580156119bd57600080fd5b505af11580156119d1573d6000803e3d6000fd5b50505050611a6e565b6119fc73ffffffffffffffffffffffffffffffffffffffff88168630866120d8565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611a3a908490612e6c565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611a7c878787878786612136565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611ae0908b908d908c908c908c908b90602401612e84565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611b7392918790600401612e27565b600060405180830381600087803b158015611b8d57600080fd5b505af1158015611ba1573d6000803e3d6000fd5b5050505050505050505050565b6000611bda827f1d1d8b63000000000000000000000000000000000000000000000000000000006121c4565b80611c0a5750611c0a827fec4fc8e3000000000000000000000000000000000000000000000000000000006121c4565b92915050565b6000611c3c837f1d1d8b63000000000000000000000000000000000000000000000000000000006121c4565b15611ce5578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb09190612c57565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611c0a565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c8c573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610ac29084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526121e7565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611e7c93929190612edf565b60405180910390a46106468686868686866122f3565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611f1f93929190612edf565b60405180910390a461161e8484848461237b565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611fe4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610209565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8686866040516120c493929190612edf565b60405180910390a461161e848484846123e8565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261161e9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d82565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8686866040516121ae93929190612edf565b60405180910390a4610646868686868686612447565b60006121cf836124bf565b80156121e057506121e08383612523565b9392505050565b6000612249826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166125f29092919063ffffffff16565b805190915015610ac257808060200190518101906122679190612f1d565b610ac2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610209565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161236b93929190612edf565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123da929190612f3f565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123da929190612f3f565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161236b93929190612edf565b60006124eb827f01ffc9a700000000000000000000000000000000000000000000000000000000612523565b8015611c0a575061251c827fffffffff00000000000000000000000000000000000000000000000000000000612523565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156125db575060208210155b80156125e75750600081115b979650505050505050565b60606126018484600085612609565b949350505050565b60608247101561269b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610209565b73ffffffffffffffffffffffffffffffffffffffff85163b612719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610209565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127429190612f58565b60006040518083038185875af1925050503d806000811461277f576040519150601f19603f3d011682016040523d82523d6000602084013e612784565b606091505b50915091506125e78282866060831561279e5750816121e0565b8251156127ae5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102099190612b08565b73ffffffffffffffffffffffffffffffffffffffff8116811461280457600080fd5b50565b60008083601f84011261281957600080fd5b50813567ffffffffffffffff81111561283157600080fd5b60208301915083602082850101111561284957600080fd5b9250929050565b600080600080600080600060c0888a03121561286b57600080fd5b8735612876816127e2565b96506020880135612886816127e2565b95506040880135612896816127e2565b945060608801356128a6816127e2565b93506080880135925060a088013567ffffffffffffffff8111156128c957600080fd5b6128d58a828b01612807565b989b979a50959850939692959293505050565b803563ffffffff811681146128fc57600080fd5b919050565b60008060006040848603121561291657600080fd5b61291f846128e8565b9250602084013567ffffffffffffffff81111561293b57600080fd5b61294786828701612807565b9497909650939450505050565b60008060008060006080868803121561296c57600080fd5b8535612977816127e2565b94506020860135612987816127e2565b935060408601359250606086013567ffffffffffffffff8111156129aa57600080fd5b6129b688828901612807565b969995985093965092949392505050565b6000806000806000608086880312156129df57600080fd5b85356129ea816127e2565b9450602086013593506129ff604087016128e8565b9250606086013567ffffffffffffffff8111156129aa57600080fd5b600080600080600080600060c0888a031215612a3657600080fd5b8735612a41816127e2565b96506020880135612a51816127e2565b95506040880135612a61816127e2565b945060608801359350612a76608089016128e8565b925060a088013567ffffffffffffffff8111156128c957600080fd5b60005b83811015612aad578181015183820152602001612a95565b8381111561161e5750506000910152565b60008151808452612ad6816020860160208601612a92565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006121e06020830184612abe565b60008060008060008060a08789031215612b3457600080fd5b8635612b3f816127e2565b95506020870135612b4f816127e2565b945060408701359350612b64606088016128e8565b9250608087013567ffffffffffffffff811115612b8057600080fd5b612b8c89828a01612807565b979a9699509497509295939492505050565b60008060408385031215612bb157600080fd5b8235612bbc816127e2565b91506020830135612bcc816127e2565b809150509250929050565b600060208284031215612be957600080fd5b81356121e0816127e2565b60008060008060608587031215612c0a57600080fd5b8435612c15816127e2565b9350612c23602086016128e8565b9250604085013567ffffffffffffffff811115612c3f57600080fd5b612c4b87828801612807565b95989497509550505050565b600060208284031215612c6957600080fd5b81516121e0816127e2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612cb557612cb5612c74565b500390565b60008060408385031215612ccd57600080fd5b8251612cd8816127e2565b602084015190925060ff81168114612bcc57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612d3057600080fd5b815167ffffffffffffffff80821115612d4857600080fd5b818401915084601f830112612d5c57600080fd5b815181811115612d6e57612d6e612cef565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715612db457612db4612cef565b81604052828152876020848701011115612dcd57600080fd5b6125e7836020830160208801612a92565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e1d6080830184612abe565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e566060830185612abe565b905063ffffffff83166040830152949350505050565b60008219821115612e7f57612e7f612c74565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612ed360c0830184612abe565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612f146060830184612abe565b95945050505050565b600060208284031215612f2f57600080fd5b815180151581146121e057600080fd5b8281526040602082015260006126016040830184612abe565b60008251612f6a818460208701612a92565b919091019291505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeDeposit\",\"inputs\":[{\"name\":\"_l1Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_otherBridge\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1TokenBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"withdrawTo\",\"inputs\":[{\"name\":\"_l2Token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"event\",\"name\":\"DepositFinalized\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalInitiated\",\"inputs\":[{\"name\":\"l1Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"l2Token\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false}]", + Bin: "0x60806040523480156200001157600080fd5b506200001e600062000024565b62000217565b600054610100900460ff1615808015620000455750600054600160ff909116105b8062000075575062000062306200016d60201b620004811760201c565b15801562000075575060005460ff166001145b620000de5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000102576000805461ff0019166101001790555b62000122734200000000000000000000000000000000000007836200017c565b801562000169576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620001e95760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d5565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612caf80620002276000396000f3fe60806040526004361061012d5760003560e01c8063662a633a116100a5578063927ede2d11610074578063c4d66de811610059578063c4d66de814610421578063c89701a214610441578063e11013dd1461046e57600080fd5b8063927ede2d146103e3578063a3a795481461040e57600080fd5b8063662a633a1461036a5780637f46ddb21461025a578063870876231461037d5780638f601f661461039d57600080fd5b806336c717c1116100fc578063540abf73116100e1578063540abf73146102d857806354fd4d50146102f85780635c975abb1461034e57600080fd5b806336c717c11461025a5780633cb747bf146102ab57600080fd5b80630166a07a1461020157806309fc8843146102215780631635f5fd1461023457806332b7006d1461024757600080fd5b366101fc57333b156101c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b6101fa73deaddeaddeaddeaddeaddeaddeaddeaddead000033333462030d406040518060200160405280600081525061049d565b005b600080fd5b34801561020d57600080fd5b506101fa61021c36600461266d565b610578565b6101fa61022f36600461271e565b61091a565b6101fa610242366004612771565b6109f1565b6101fa6102553660046127e4565b610ed8565b34801561026657600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102b757600080fd5b506003546102819073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102e457600080fd5b506101fa6102f3366004612838565b610fb2565b34801561030457600080fd5b506103416040518060400160405280601b81526020017f312e392e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102a29190612925565b34801561035a57600080fd5b50604051600081526020016102a2565b6101fa61037836600461266d565b610ff7565b34801561038957600080fd5b506101fa610398366004612938565b61106a565b3480156103a957600080fd5b506103d56103b83660046129bb565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102a2565b3480156103ef57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff16610281565b6101fa61041c366004612938565b61113e565b34801561042d57600080fd5b506101fa61043c3660046129f4565b611182565b34801561044d57600080fd5b506004546102819073ffffffffffffffffffffffffffffffffffffffff1681565b6101fa61047c366004612a11565b61132b565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b7fffffffffffffffffffffffff215221522152215221522152215221522153000073ffffffffffffffffffffffffffffffffffffffff8716016104ec576104e78585858585611374565b610570565b60008673ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061055d9190612a74565b905061056e878288888888886115d3565b505b505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561064b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561060f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106339190612a74565b73ffffffffffffffffffffffffffffffffffffffff16145b6106fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101bd565b610706876118fe565b15610854576107158787611960565b6107c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101bd565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b505050506108d6565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610892908490612ac0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c16835293905291909120919091556108d6908585611a80565b61056e878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b5492505050565b333b156109a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b6109ec3333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061137492505050565b505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610ac4575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac9190612a74565b73ffffffffffffffffffffffffffffffffffffffff16145b610b76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a4016101bd565b610b7e611be2565b15610c0b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e00000000000000000060648201526084016101bd565b823414610c9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e7420726571756972656400000000000060648201526084016101bd565b3073ffffffffffffffffffffffffffffffffffffffff851603610d3f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c66000000000000000000000000000000000000000000000000000000000060648201526084016101bd565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610dea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e67657200000000000000000000000000000000000000000000000060648201526084016101bd565b610e2c85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c2192505050565b6000610e49855a8660405180602001604052806000815250611cc2565b905080610570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c6564000000000000000000000000000000000000000000000000000000000060648201526084016101bd565b333b15610f67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b610fab853333878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049d92505050565b5050505050565b61056e87873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115d392505050565b73ffffffffffffffffffffffffffffffffffffffff8716158015611044575073ffffffffffffffffffffffffffffffffffffffff861673deaddeaddeaddeaddeaddeaddeaddeaddead0000145b1561105b5761105685858585856109f1565b61056e565b61056e86888787878787610578565b333b156110f9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084016101bd565b61057086863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115d392505050565b610570863387878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061049d92505050565b600054610100900460ff16158080156111a25750600054600160ff909116105b806111bc5750303b1580156111bc575060005460ff166001145b611248576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016101bd565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156112a657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6112c473420000000000000000000000000000000000000783611cdc565b801561132757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b61136e3385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061137492505050565b50505050565b61137c611be2565b15611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e00000000000000000060648201526084016101bd565b823414611498576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c7565000060648201526084016101bd565b6114a485858584611dc6565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611507908b908b9086908a90602401612ad7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261159a92918890600401612b20565b6000604051808303818588803b1580156115b357600080fd5b505af11580156115c7573d6000803e3d6000fd5b50505050505050505050565b6115dc876118fe565b1561172a576115eb8787611960565b61169d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a4016101bd565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561170d57600080fd5b505af1158015611721573d6000803e3d6000fd5b505050506117be565b61174c73ffffffffffffffffffffffffffffffffffffffff8816863086611e67565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a168352929052205461178a908490612b65565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6117cc878787878786611ec5565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611830908b908d908c908c908c908b90602401612b7d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526118c392918790600401612b20565b600060405180830381600087803b1580156118dd57600080fd5b505af11580156118f1573d6000803e3d6000fd5b5050505050505050505050565b600061192a827f1d1d8b6300000000000000000000000000000000000000000000000000000000611f53565b8061195a575061195a827fec4fc8e300000000000000000000000000000000000000000000000000000000611f53565b92915050565b600061198c837f1d1d8b6300000000000000000000000000000000000000000000000000000000611f53565b15611a35578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a009190612a74565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614905061195a565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119dc573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526109ec9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611f76565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611bcc93929190612bd8565b60405180910390a4610570868686868686612082565b600080611bed61210a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611cae93929190612bd8565b60405180910390a461136e84848484612198565b600080600080845160208601878a8af19695505050505050565b600054610100900460ff16611d73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016101bd565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8373ffffffffffffffffffffffffffffffffffffffff1673deaddeaddeaddeaddeaddeaddeaddeaddead000073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611e5393929190612bd8565b60405180910390a461136e84848484612205565b60405173ffffffffffffffffffffffffffffffffffffffff8085166024830152831660448201526064810182905261136e9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611ad2565b8373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e868686604051611f3d93929190612bd8565b60405180910390a4610570868686868686612264565b6000611f5e836122dc565b8015611f6f5750611f6f8383612340565b9392505050565b6000611fd8826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661240f9092919063ffffffff16565b8051909150156109ec5780806020019051810190611ff69190612c16565b6109ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016101bd565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd8686866040516120fa93929190612bd8565b60405180910390a4505050505050565b60008073420000000000000000000000000000000000001573ffffffffffffffffffffffffffffffffffffffff16634397dfef6040518163ffffffff1660e01b81526004016040805180830381865afa15801561216b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061218f9190612c38565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516121f7929190612c6d565b60405180910390a350505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516121f7929190612c6d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf8686866040516120fa93929190612bd8565b6000612308827f01ffc9a700000000000000000000000000000000000000000000000000000000612340565b801561195a5750612339827fffffffff00000000000000000000000000000000000000000000000000000000612340565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156123f8575060208210155b80156124045750600081115b979650505050505050565b606061241e8484600085612426565b949350505050565b6060824710156124b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016101bd565b73ffffffffffffffffffffffffffffffffffffffff85163b612536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101bd565b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161255f9190612c86565b60006040518083038185875af1925050503d806000811461259c576040519150601f19603f3d011682016040523d82523d6000602084013e6125a1565b606091505b5091509150612404828286606083156125bb575081611f6f565b8251156125cb5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101bd9190612925565b73ffffffffffffffffffffffffffffffffffffffff8116811461262157600080fd5b50565b60008083601f84011261263657600080fd5b50813567ffffffffffffffff81111561264e57600080fd5b60208301915083602082850101111561266657600080fd5b9250929050565b600080600080600080600060c0888a03121561268857600080fd5b8735612693816125ff565b965060208801356126a3816125ff565b955060408801356126b3816125ff565b945060608801356126c3816125ff565b93506080880135925060a088013567ffffffffffffffff8111156126e657600080fd5b6126f28a828b01612624565b989b979a50959850939692959293505050565b803563ffffffff8116811461271957600080fd5b919050565b60008060006040848603121561273357600080fd5b61273c84612705565b9250602084013567ffffffffffffffff81111561275857600080fd5b61276486828701612624565b9497909650939450505050565b60008060008060006080868803121561278957600080fd5b8535612794816125ff565b945060208601356127a4816125ff565b935060408601359250606086013567ffffffffffffffff8111156127c757600080fd5b6127d388828901612624565b969995985093965092949392505050565b6000806000806000608086880312156127fc57600080fd5b8535612807816125ff565b94506020860135935061281c60408701612705565b9250606086013567ffffffffffffffff8111156127c757600080fd5b600080600080600080600060c0888a03121561285357600080fd5b873561285e816125ff565b9650602088013561286e816125ff565b9550604088013561287e816125ff565b94506060880135935061289360808901612705565b925060a088013567ffffffffffffffff8111156126e657600080fd5b60005b838110156128ca5781810151838201526020016128b2565b8381111561136e5750506000910152565b600081518084526128f38160208601602086016128af565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611f6f60208301846128db565b60008060008060008060a0878903121561295157600080fd5b863561295c816125ff565b9550602087013561296c816125ff565b94506040870135935061298160608801612705565b9250608087013567ffffffffffffffff81111561299d57600080fd5b6129a989828a01612624565b979a9699509497509295939492505050565b600080604083850312156129ce57600080fd5b82356129d9816125ff565b915060208301356129e9816125ff565b809150509250929050565b600060208284031215612a0657600080fd5b8135611f6f816125ff565b60008060008060608587031215612a2757600080fd5b8435612a32816125ff565b9350612a4060208601612705565b9250604085013567ffffffffffffffff811115612a5c57600080fd5b612a6887828801612624565b95989497509550505050565b600060208284031215612a8657600080fd5b8151611f6f816125ff565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612ad257612ad2612a91565b500390565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612b1660808301846128db565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612b4f60608301856128db565b905063ffffffff83166040830152949350505050565b60008219821115612b7857612b78612a91565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612bcc60c08301846128db565b98975050505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612c0d60608301846128db565b95945050505050565b600060208284031215612c2857600080fd5b81518015158114611f6f57600080fd5b60008060408385031215612c4b57600080fd5b8251612c56816125ff565b602084015190925060ff811681146129e957600080fd5b82815260406020820152600061241e60408301846128db565b60008251612c988184602087016128af565b919091019291505056fea164736f6c634300080f000a", } // L2StandardBridgeABI is the input ABI used to generate the binding from. @@ -294,144 +294,6 @@ func (_L2StandardBridge *L2StandardBridgeCallerSession) Deposits(arg0 common.Add return _L2StandardBridge.Contract.Deposits(&_L2StandardBridge.CallOpts, arg0, arg1) } -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_L2StandardBridge *L2StandardBridgeCaller) GasPayingToken(opts *bind.CallOpts) (struct { - Addr common.Address - Decimals uint8 -}, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "gasPayingToken") - - outstruct := new(struct { - Addr common.Address - Decimals uint8 - }) - if err != nil { - return *outstruct, err - } - - outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - outstruct.Decimals = *abi.ConvertType(out[1], new(uint8)).(*uint8) - - return *outstruct, err - -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_L2StandardBridge *L2StandardBridgeSession) GasPayingToken() (struct { - Addr common.Address - Decimals uint8 -}, error) { - return _L2StandardBridge.Contract.GasPayingToken(&_L2StandardBridge.CallOpts) -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address addr_, uint8 decimals_) -func (_L2StandardBridge *L2StandardBridgeCallerSession) GasPayingToken() (struct { - Addr common.Address - Decimals uint8 -}, error) { - return _L2StandardBridge.Contract.GasPayingToken(&_L2StandardBridge.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L2StandardBridge *L2StandardBridgeCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "gasPayingTokenName") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L2StandardBridge *L2StandardBridgeSession) GasPayingTokenName() (string, error) { - return _L2StandardBridge.Contract.GasPayingTokenName(&_L2StandardBridge.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string name_) -func (_L2StandardBridge *L2StandardBridgeCallerSession) GasPayingTokenName() (string, error) { - return _L2StandardBridge.Contract.GasPayingTokenName(&_L2StandardBridge.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L2StandardBridge *L2StandardBridgeCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "gasPayingTokenSymbol") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L2StandardBridge *L2StandardBridgeSession) GasPayingTokenSymbol() (string, error) { - return _L2StandardBridge.Contract.GasPayingTokenSymbol(&_L2StandardBridge.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string symbol_) -func (_L2StandardBridge *L2StandardBridgeCallerSession) GasPayingTokenSymbol() (string, error) { - return _L2StandardBridge.Contract.GasPayingTokenSymbol(&_L2StandardBridge.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L2StandardBridge *L2StandardBridgeCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _L2StandardBridge.contract.Call(opts, &out, "isCustomGasToken") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L2StandardBridge *L2StandardBridgeSession) IsCustomGasToken() (bool, error) { - return _L2StandardBridge.Contract.IsCustomGasToken(&_L2StandardBridge.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_L2StandardBridge *L2StandardBridgeCallerSession) IsCustomGasToken() (bool, error) { - return _L2StandardBridge.Contract.IsCustomGasToken(&_L2StandardBridge.CallOpts) -} - // L1TokenBridge is a free data retrieval call binding the contract method 0x36c717c1. // // Solidity: function l1TokenBridge() view returns(address) diff --git a/op-bindings/bindings/standardbridge.go b/op-bindings/bindings/standardbridge.go index 4650e46d811..eb5866bb725 100644 --- a/op-bindings/bindings/standardbridge.go +++ b/op-bindings/bindings/standardbridge.go @@ -30,7 +30,7 @@ var ( // StandardBridgeMetaData contains all meta data concerning the StandardBridge contract. var StandardBridgeMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", + ABI: "[{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OTHER_BRIDGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeERC20To\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bridgeETH\",\"inputs\":[{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"bridgeETHTo\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_minGasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"deposits\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"finalizeBridgeERC20\",\"inputs\":[{\"name\":\"_localToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_remoteToken\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeBridgeETH\",\"inputs\":[{\"name\":\"_from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_extraData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"messenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractCrossDomainMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"otherBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractStandardBridge\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ERC20BridgeFinalized\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ERC20BridgeInitiated\",\"inputs\":[{\"name\":\"localToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"remoteToken\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeFinalized\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ETHBridgeInitiated\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"extraData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false}]", } // StandardBridgeABI is the input ABI used to generate the binding from. @@ -272,131 +272,6 @@ func (_StandardBridge *StandardBridgeCallerSession) Deposits(arg0 common.Address return _StandardBridge.Contract.Deposits(&_StandardBridge.CallOpts, arg0, arg1) } -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address, uint8) -func (_StandardBridge *StandardBridgeCaller) GasPayingToken(opts *bind.CallOpts) (common.Address, uint8, error) { - var out []interface{} - err := _StandardBridge.contract.Call(opts, &out, "gasPayingToken") - - if err != nil { - return *new(common.Address), *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - out1 := *abi.ConvertType(out[1], new(uint8)).(*uint8) - - return out0, out1, err - -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address, uint8) -func (_StandardBridge *StandardBridgeSession) GasPayingToken() (common.Address, uint8, error) { - return _StandardBridge.Contract.GasPayingToken(&_StandardBridge.CallOpts) -} - -// GasPayingToken is a free data retrieval call binding the contract method 0x4397dfef. -// -// Solidity: function gasPayingToken() view returns(address, uint8) -func (_StandardBridge *StandardBridgeCallerSession) GasPayingToken() (common.Address, uint8, error) { - return _StandardBridge.Contract.GasPayingToken(&_StandardBridge.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string) -func (_StandardBridge *StandardBridgeCaller) GasPayingTokenName(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _StandardBridge.contract.Call(opts, &out, "gasPayingTokenName") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string) -func (_StandardBridge *StandardBridgeSession) GasPayingTokenName() (string, error) { - return _StandardBridge.Contract.GasPayingTokenName(&_StandardBridge.CallOpts) -} - -// GasPayingTokenName is a free data retrieval call binding the contract method 0xd8444715. -// -// Solidity: function gasPayingTokenName() view returns(string) -func (_StandardBridge *StandardBridgeCallerSession) GasPayingTokenName() (string, error) { - return _StandardBridge.Contract.GasPayingTokenName(&_StandardBridge.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string) -func (_StandardBridge *StandardBridgeCaller) GasPayingTokenSymbol(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _StandardBridge.contract.Call(opts, &out, "gasPayingTokenSymbol") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string) -func (_StandardBridge *StandardBridgeSession) GasPayingTokenSymbol() (string, error) { - return _StandardBridge.Contract.GasPayingTokenSymbol(&_StandardBridge.CallOpts) -} - -// GasPayingTokenSymbol is a free data retrieval call binding the contract method 0x550fcdc9. -// -// Solidity: function gasPayingTokenSymbol() view returns(string) -func (_StandardBridge *StandardBridgeCallerSession) GasPayingTokenSymbol() (string, error) { - return _StandardBridge.Contract.GasPayingTokenSymbol(&_StandardBridge.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_StandardBridge *StandardBridgeCaller) IsCustomGasToken(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _StandardBridge.contract.Call(opts, &out, "isCustomGasToken") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_StandardBridge *StandardBridgeSession) IsCustomGasToken() (bool, error) { - return _StandardBridge.Contract.IsCustomGasToken(&_StandardBridge.CallOpts) -} - -// IsCustomGasToken is a free data retrieval call binding the contract method 0x21326849. -// -// Solidity: function isCustomGasToken() view returns(bool) -func (_StandardBridge *StandardBridgeCallerSession) IsCustomGasToken() (bool, error) { - return _StandardBridge.Contract.IsCustomGasToken(&_StandardBridge.CallOpts) -} - // Messenger is a free data retrieval call binding the contract method 0x3cb747bf. // // Solidity: function messenger() view returns(address) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index f2492dd48db..4d0e86be6df 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -1,10 +1,10 @@ -GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 369211) -GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2967418) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 561814) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4073790) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 466811) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3512560) -GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 72650) +GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 369354) +GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2967561) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 562014) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4073990) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 466942) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3512691) +GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 72605) GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 92973) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 68431) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 68923) diff --git a/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json b/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json index aa17e1f1d10..cc99f64c449 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json +++ b/packages/contracts-bedrock/snapshots/abi/L1CrossDomainMessenger.json @@ -177,50 +177,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "gasPayingToken", - "outputs": [ - { - "internalType": "address", - "name": "_addr", - "type": "address" - }, - { - "internalType": "uint8", - "name": "_decimals", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPayingTokenName", - "outputs": [ - { - "internalType": "string", - "name": "name_", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPayingTokenSymbol", - "outputs": [ - { - "internalType": "string", - "name": "symbol_", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -244,19 +200,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "isCustomGasToken", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "messageNonce", diff --git a/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json b/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json index 8bb12b4d7f7..2a93a9f8da2 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json +++ b/packages/contracts-bedrock/snapshots/abi/L1StandardBridge.json @@ -414,50 +414,6 @@ "stateMutability": "payable", "type": "function" }, - { - "inputs": [], - "name": "gasPayingToken", - "outputs": [ - { - "internalType": "address", - "name": "addr_", - "type": "address" - }, - { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPayingTokenName", - "outputs": [ - { - "internalType": "string", - "name": "name_", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPayingTokenSymbol", - "outputs": [ - { - "internalType": "string", - "name": "symbol_", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -481,19 +437,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "isCustomGasToken", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "l2TokenBridge", diff --git a/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json b/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json index 4982be60e95..717bbb6eb6f 100644 --- a/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json +++ b/packages/contracts-bedrock/snapshots/abi/L2CrossDomainMessenger.json @@ -164,50 +164,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "gasPayingToken", - "outputs": [ - { - "internalType": "address", - "name": "addr_", - "type": "address" - }, - { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPayingTokenName", - "outputs": [ - { - "internalType": "string", - "name": "name_", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPayingTokenSymbol", - "outputs": [ - { - "internalType": "string", - "name": "symbol_", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -221,19 +177,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "isCustomGasToken", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "l1CrossDomainMessenger", diff --git a/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json b/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json index c37207cc54e..74a2ae477d9 100644 --- a/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json +++ b/packages/contracts-bedrock/snapshots/abi/L2StandardBridge.json @@ -274,50 +274,6 @@ "stateMutability": "payable", "type": "function" }, - { - "inputs": [], - "name": "gasPayingToken", - "outputs": [ - { - "internalType": "address", - "name": "addr_", - "type": "address" - }, - { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPayingTokenName", - "outputs": [ - { - "internalType": "string", - "name": "name_", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "gasPayingTokenSymbol", - "outputs": [ - { - "internalType": "string", - "name": "symbol_", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -331,19 +287,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "isCustomGasToken", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "l1TokenBridge", diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json index f40a6d87081..41969e6cac7 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json @@ -3707,7 +3707,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620018671760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612471806200029e6000396000f3fe6080604052600436106101b75760003560e01c80635c975abb116100ec578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610534578063d844471514610547578063db505d801461055c578063ecc704281461058957600080fd5b8063b1b1b209146104c4578063b28ade25146104f4578063c0c53b8b1461051457600080fd5b806383a74074116100c657806383a74074146104525780638cbeeef2146103645780639fce812c14610469578063a4e7f8bd1461049457600080fd5b80635c975abb146103fb5780636425666b146104105780636e296e451461043d57600080fd5b80633dbb202b116101595780634c1d6a69116101335780634c1d6a691461036457806354fd4d501461037a578063550fcdc9146103d05780635644cfdf146103e557600080fd5b80633dbb202b146102e45780633f827a5a146102f95780634397dfef1461032157600080fd5b8063213268491161019557806321326849146102505780632828d7e81461027557806333d7e2bd1461028a57806335e80ab3146102b757600080fd5b8063028f85f7146101bc5780630c568498146101ef5780630ff754ea14610204575b600080fd5b3480156101c857600080fd5b506101d1601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506101d1603f81565b34801561021057600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b34801561025c57600080fd5b506102656105ee565b60405190151581526020016101e6565b34801561028157600080fd5b506101d1604081565b34801561029657600080fd5b5060fd5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102c357600080fd5b5060fb5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f76102f2366004611db3565b61062d565b005b34801561030557600080fd5b5061030e600181565b60405161ffff90911681526020016101e6565b34801561032d57600080fd5b5061033661092a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101e6565b34801561037057600080fd5b506101d1619c4081565b34801561038657600080fd5b506103c36040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101e69190611e90565b3480156103dc57600080fd5b506103c36109c7565b3480156103f157600080fd5b506101d161138881565b34801561040757600080fd5b50610265610a82565b34801561041c57600080fd5b5060fc5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044957600080fd5b5061022b610b16565b34801561045e57600080fd5b506101d162030d4081565b34801561047557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661022b565b3480156104a057600080fd5b506102656104af366004611eaa565b60ce6020526000908152604090205460ff1681565b3480156104d057600080fd5b506102656104df366004611eaa565b60cb6020526000908152604090205460ff1681565b34801561050057600080fd5b506101d161050f366004611ec3565b610bfd565b34801561052057600080fd5b506102f761052f366004611f17565b610c6b565b6102f7610542366004611f62565b610ee2565b34801561055357600080fd5b506103c36117f7565b34801561056857600080fd5b5060cf5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059557600080fd5b506105e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101e6565b6000806105f961092a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6106356105ee565b156106cd5734156106cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107ff9073ffffffffffffffffffffffffffffffffffffffff166106f5858585610bfd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061076160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161077d9796959493929190612031565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611883565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561088460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610896959493929190612090565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906120de565b90939092509050565b60fd54604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7d919081019061214d565b905090565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612218565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016106c4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610c19604063ffffffff8816612269565b610c239190612299565b610c2e601088612269565b610c3b9062030d406122e7565b610c4591906122e7565b610c4f91906122e7565b610c5991906122e7565b610c6391906122e7565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610cb6575060005460017401000000000000000000000000000000000000000090910460ff16105b80610ce85750303b158015610ce8575060005474010000000000000000000000000000000000000000900460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106c4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610dfa57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610e7973420000000000000000000000000000000000000761191c565b8015610edc57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610eea610a82565b15610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016106c4565b60f087901c6002811061100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016106c4565b8061ffff1660000361110157600061105d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611a58915050565b600081815260cb602052604090205490915060ff16156110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016106c4565b505b6000611147898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7792505050565b9050611151611a9a565b156111895785341461116557611165612313565b600081815260ce602052604090205460ff161561118457611184612313565b6112db565b341561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016106c4565b600081815260ce602052604090205460ff166112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016106c4565b6112e487611b76565b15611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016106c4565b600081815260cb602052604090205460ff1615611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016106c4565b61145785611448611388619c406122e7565b67ffffffffffffffff16611bbc565b158061147d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561159657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b50506117ee565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061162788619c405a6115ea9190612342565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bda92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156116dd57600082815260cb602052604090205460ff161561167a5761167a612313565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26117ea565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b5050505b50505050505050565b60fd54604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906118e4908890839089906000908990600401612359565b6000604051808303818588803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106c4565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611a115760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a6685858585611bf4565b805190602001209050949350505050565b6000611a87878787878787611c8d565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a7d575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a91906123a6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611bb6575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611c0d94939291906123c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611caa9695949392919061240d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d4e57600080fd5b50565b60008083601f840112611d6357600080fd5b50813567ffffffffffffffff811115611d7b57600080fd5b602083019150836020828501011115611d9357600080fd5b9250929050565b803563ffffffff81168114611dae57600080fd5b919050565b60008060008060608587031215611dc957600080fd5b8435611dd481611d2c565b9350602085013567ffffffffffffffff811115611df057600080fd5b611dfc87828801611d51565b9094509250611e0f905060408601611d9a565b905092959194509250565b60005b83811015611e35578181015183820152602001611e1d565b83811115610edc5750506000910152565b60008151808452611e5e816020860160208601611e1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ea36020830184611e46565b9392505050565b600060208284031215611ebc57600080fd5b5035919050565b600080600060408486031215611ed857600080fd5b833567ffffffffffffffff811115611eef57600080fd5b611efb86828701611d51565b9094509250611f0e905060208501611d9a565b90509250925092565b600080600060608486031215611f2c57600080fd5b8335611f3781611d2c565b92506020840135611f4781611d2c565b91506040840135611f5781611d2c565b809150509250925092565b600080600080600080600060c0888a031215611f7d57600080fd5b873596506020880135611f8f81611d2c565b95506040880135611f9f81611d2c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611fc957600080fd5b611fd58a828b01611d51565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261208360c083018486611fe8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c0608083018688611fe8565b905083604083015263ffffffff831660608301529695505050505050565b600080604083850312156120f157600080fd5b82516120fc81611d2c565b602084015190925060ff8116811461211357600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561215f57600080fd5b815167ffffffffffffffff8082111561217757600080fd5b818401915084601f83011261218b57600080fd5b81518181111561219d5761219d61211e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e361211e565b816040528281528760208487010111156121fc57600080fd5b61220d836020830160208801611e1a565b979650505050505050565b60006020828403121561222a57600080fd5b81518015158114611ea357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156122905761229061223a565b02949350505050565b600067ffffffffffffffff808416806122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561230a5761230a61223a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156123545761235461223a565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061220d60a0830184611e46565b6000602082840312156123b857600080fd5b8151611ea381611d2c565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526123fc6080830185611e46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261245860c0830184611e46565b9897505050505050505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620015b71760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6121a3806200029e6000396000f3fe60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3719,13 +3719,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620018671760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b612471806200029e6000396000f3fe6080604052600436106101b75760003560e01c80635c975abb116100ec578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610534578063d844471514610547578063db505d801461055c578063ecc704281461058957600080fd5b8063b1b1b209146104c4578063b28ade25146104f4578063c0c53b8b1461051457600080fd5b806383a74074116100c657806383a74074146104525780638cbeeef2146103645780639fce812c14610469578063a4e7f8bd1461049457600080fd5b80635c975abb146103fb5780636425666b146104105780636e296e451461043d57600080fd5b80633dbb202b116101595780634c1d6a69116101335780634c1d6a691461036457806354fd4d501461037a578063550fcdc9146103d05780635644cfdf146103e557600080fd5b80633dbb202b146102e45780633f827a5a146102f95780634397dfef1461032157600080fd5b8063213268491161019557806321326849146102505780632828d7e81461027557806333d7e2bd1461028a57806335e80ab3146102b757600080fd5b8063028f85f7146101bc5780630c568498146101ef5780630ff754ea14610204575b600080fd5b3480156101c857600080fd5b506101d1601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506101d1603f81565b34801561021057600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b34801561025c57600080fd5b506102656105ee565b60405190151581526020016101e6565b34801561028157600080fd5b506101d1604081565b34801561029657600080fd5b5060fd5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102c357600080fd5b5060fb5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f76102f2366004611db3565b61062d565b005b34801561030557600080fd5b5061030e600181565b60405161ffff90911681526020016101e6565b34801561032d57600080fd5b5061033661092a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101e6565b34801561037057600080fd5b506101d1619c4081565b34801561038657600080fd5b506103c36040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101e69190611e90565b3480156103dc57600080fd5b506103c36109c7565b3480156103f157600080fd5b506101d161138881565b34801561040757600080fd5b50610265610a82565b34801561041c57600080fd5b5060fc5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044957600080fd5b5061022b610b16565b34801561045e57600080fd5b506101d162030d4081565b34801561047557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661022b565b3480156104a057600080fd5b506102656104af366004611eaa565b60ce6020526000908152604090205460ff1681565b3480156104d057600080fd5b506102656104df366004611eaa565b60cb6020526000908152604090205460ff1681565b34801561050057600080fd5b506101d161050f366004611ec3565b610bfd565b34801561052057600080fd5b506102f761052f366004611f17565b610c6b565b6102f7610542366004611f62565b610ee2565b34801561055357600080fd5b506103c36117f7565b34801561056857600080fd5b5060cf5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059557600080fd5b506105e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101e6565b6000806105f961092a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6106356105ee565b156106cd5734156106cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107ff9073ffffffffffffffffffffffffffffffffffffffff166106f5858585610bfd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061076160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161077d9796959493929190612031565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611883565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561088460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610896959493929190612090565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906120de565b90939092509050565b60fd54604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7d919081019061214d565b905090565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612218565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016106c4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610c19604063ffffffff8816612269565b610c239190612299565b610c2e601088612269565b610c3b9062030d406122e7565b610c4591906122e7565b610c4f91906122e7565b610c5991906122e7565b610c6391906122e7565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610cb6575060005460017401000000000000000000000000000000000000000090910460ff16105b80610ce85750303b158015610ce8575060005474010000000000000000000000000000000000000000900460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106c4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610dfa57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610e7973420000000000000000000000000000000000000761191c565b8015610edc57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610eea610a82565b15610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016106c4565b60f087901c6002811061100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016106c4565b8061ffff1660000361110157600061105d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611a58915050565b600081815260cb602052604090205490915060ff16156110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016106c4565b505b6000611147898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7792505050565b9050611151611a9a565b156111895785341461116557611165612313565b600081815260ce602052604090205460ff161561118457611184612313565b6112db565b341561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016106c4565b600081815260ce602052604090205460ff166112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016106c4565b6112e487611b76565b15611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016106c4565b600081815260cb602052604090205460ff1615611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016106c4565b61145785611448611388619c406122e7565b67ffffffffffffffff16611bbc565b158061147d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561159657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b50506117ee565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061162788619c405a6115ea9190612342565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bda92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156116dd57600082815260cb602052604090205460ff161561167a5761167a612313565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26117ea565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b5050505b50505050505050565b60fd54604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906118e4908890839089906000908990600401612359565b6000604051808303818588803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106c4565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611a115760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a6685858585611bf4565b805190602001209050949350505050565b6000611a87878787878787611c8d565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a7d575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a91906123a6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611bb6575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611c0d94939291906123c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611caa9695949392919061240d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d4e57600080fd5b50565b60008083601f840112611d6357600080fd5b50813567ffffffffffffffff811115611d7b57600080fd5b602083019150836020828501011115611d9357600080fd5b9250929050565b803563ffffffff81168114611dae57600080fd5b919050565b60008060008060608587031215611dc957600080fd5b8435611dd481611d2c565b9350602085013567ffffffffffffffff811115611df057600080fd5b611dfc87828801611d51565b9094509250611e0f905060408601611d9a565b905092959194509250565b60005b83811015611e35578181015183820152602001611e1d565b83811115610edc5750506000910152565b60008151808452611e5e816020860160208601611e1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ea36020830184611e46565b9392505050565b600060208284031215611ebc57600080fd5b5035919050565b600080600060408486031215611ed857600080fd5b833567ffffffffffffffff811115611eef57600080fd5b611efb86828701611d51565b9094509250611f0e905060208501611d9a565b90509250925092565b600080600060608486031215611f2c57600080fd5b8335611f3781611d2c565b92506020840135611f4781611d2c565b91506040840135611f5781611d2c565b809150509250925092565b600080600080600080600060c0888a031215611f7d57600080fd5b873596506020880135611f8f81611d2c565b95506040880135611f9f81611d2c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611fc957600080fd5b611fd58a828b01611d51565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261208360c083018486611fe8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c0608083018688611fe8565b905083604083015263ffffffff831660608301529695505050505050565b600080604083850312156120f157600080fd5b82516120fc81611d2c565b602084015190925060ff8116811461211357600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561215f57600080fd5b815167ffffffffffffffff8082111561217757600080fd5b818401915084601f83011261218b57600080fd5b81518181111561219d5761219d61211e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e361211e565b816040528281528760208487010111156121fc57600080fd5b61220d836020830160208801611e1a565b979650505050505050565b60006020828403121561222a57600080fd5b81518015158114611ea357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156122905761229061223a565b02949350505050565b600067ffffffffffffffff808416806122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561230a5761230a61223a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156123545761235461223a565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061220d60a0830184611e46565b6000602082840312156123b857600080fd5b8151611ea381611d2c565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526123fc6080830185611e46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261245860c0830184611e46565b9897505050505050505056fea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101b75760003560e01c80635c975abb116100ec578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610534578063d844471514610547578063db505d801461055c578063ecc704281461058957600080fd5b8063b1b1b209146104c4578063b28ade25146104f4578063c0c53b8b1461051457600080fd5b806383a74074116100c657806383a74074146104525780638cbeeef2146103645780639fce812c14610469578063a4e7f8bd1461049457600080fd5b80635c975abb146103fb5780636425666b146104105780636e296e451461043d57600080fd5b80633dbb202b116101595780634c1d6a69116101335780634c1d6a691461036457806354fd4d501461037a578063550fcdc9146103d05780635644cfdf146103e557600080fd5b80633dbb202b146102e45780633f827a5a146102f95780634397dfef1461032157600080fd5b8063213268491161019557806321326849146102505780632828d7e81461027557806333d7e2bd1461028a57806335e80ab3146102b757600080fd5b8063028f85f7146101bc5780630c568498146101ef5780630ff754ea14610204575b600080fd5b3480156101c857600080fd5b506101d1601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506101d1603f81565b34801561021057600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b34801561025c57600080fd5b506102656105ee565b60405190151581526020016101e6565b34801561028157600080fd5b506101d1604081565b34801561029657600080fd5b5060fd5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102c357600080fd5b5060fb5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f76102f2366004611db3565b61062d565b005b34801561030557600080fd5b5061030e600181565b60405161ffff90911681526020016101e6565b34801561032d57600080fd5b5061033661092a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101e6565b34801561037057600080fd5b506101d1619c4081565b34801561038657600080fd5b506103c36040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101e69190611e90565b3480156103dc57600080fd5b506103c36109c7565b3480156103f157600080fd5b506101d161138881565b34801561040757600080fd5b50610265610a82565b34801561041c57600080fd5b5060fc5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044957600080fd5b5061022b610b16565b34801561045e57600080fd5b506101d162030d4081565b34801561047557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661022b565b3480156104a057600080fd5b506102656104af366004611eaa565b60ce6020526000908152604090205460ff1681565b3480156104d057600080fd5b506102656104df366004611eaa565b60cb6020526000908152604090205460ff1681565b34801561050057600080fd5b506101d161050f366004611ec3565b610bfd565b34801561052057600080fd5b506102f761052f366004611f17565b610c6b565b6102f7610542366004611f62565b610ee2565b34801561055357600080fd5b506103c36117f7565b34801561056857600080fd5b5060cf5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059557600080fd5b506105e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101e6565b6000806105f961092a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6106356105ee565b156106cd5734156106cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107ff9073ffffffffffffffffffffffffffffffffffffffff166106f5858585610bfd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061076160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161077d9796959493929190612031565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611883565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561088460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610896959493929190612090565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906120de565b90939092509050565b60fd54604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7d919081019061214d565b905090565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612218565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016106c4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610c19604063ffffffff8816612269565b610c239190612299565b610c2e601088612269565b610c3b9062030d406122e7565b610c4591906122e7565b610c4f91906122e7565b610c5991906122e7565b610c6391906122e7565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610cb6575060005460017401000000000000000000000000000000000000000090910460ff16105b80610ce85750303b158015610ce8575060005474010000000000000000000000000000000000000000900460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106c4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610dfa57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610e7973420000000000000000000000000000000000000761191c565b8015610edc57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610eea610a82565b15610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016106c4565b60f087901c6002811061100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016106c4565b8061ffff1660000361110157600061105d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611a58915050565b600081815260cb602052604090205490915060ff16156110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016106c4565b505b6000611147898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7792505050565b9050611151611a9a565b156111895785341461116557611165612313565b600081815260ce602052604090205460ff161561118457611184612313565b6112db565b341561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016106c4565b600081815260ce602052604090205460ff166112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016106c4565b6112e487611b76565b15611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016106c4565b600081815260cb602052604090205460ff1615611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016106c4565b61145785611448611388619c406122e7565b67ffffffffffffffff16611bbc565b158061147d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561159657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b50506117ee565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061162788619c405a6115ea9190612342565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bda92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156116dd57600082815260cb602052604090205460ff161561167a5761167a612313565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26117ea565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b5050505b50505050505050565b60fd54604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906118e4908890839089906000908990600401612359565b6000604051808303818588803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106c4565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611a115760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a6685858585611bf4565b805190602001209050949350505050565b6000611a87878787878787611c8d565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a7d575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a91906123a6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611bb6575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611c0d94939291906123c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611caa9695949392919061240d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d4e57600080fd5b50565b60008083601f840112611d6357600080fd5b50813567ffffffffffffffff811115611d7b57600080fd5b602083019150836020828501011115611d9357600080fd5b9250929050565b803563ffffffff81168114611dae57600080fd5b919050565b60008060008060608587031215611dc957600080fd5b8435611dd481611d2c565b9350602085013567ffffffffffffffff811115611df057600080fd5b611dfc87828801611d51565b9094509250611e0f905060408601611d9a565b905092959194509250565b60005b83811015611e35578181015183820152602001611e1d565b83811115610edc5750506000910152565b60008151808452611e5e816020860160208601611e1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ea36020830184611e46565b9392505050565b600060208284031215611ebc57600080fd5b5035919050565b600080600060408486031215611ed857600080fd5b833567ffffffffffffffff811115611eef57600080fd5b611efb86828701611d51565b9094509250611f0e905060208501611d9a565b90509250925092565b600080600060608486031215611f2c57600080fd5b8335611f3781611d2c565b92506020840135611f4781611d2c565b91506040840135611f5781611d2c565b809150509250925092565b600080600080600080600060c0888a031215611f7d57600080fd5b873596506020880135611f8f81611d2c565b95506040880135611f9f81611d2c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611fc957600080fd5b611fd58a828b01611d51565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261208360c083018486611fe8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c0608083018688611fe8565b905083604083015263ffffffff831660608301529695505050505050565b600080604083850312156120f157600080fd5b82516120fc81611d2c565b602084015190925060ff8116811461211357600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561215f57600080fd5b815167ffffffffffffffff8082111561217757600080fd5b818401915084601f83011261218b57600080fd5b81518181111561219d5761219d61211e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e361211e565b816040528281528760208487010111156121fc57600080fd5b61220d836020830160208801611e1a565b979650505050505050565b60006020828403121561222a57600080fd5b81518015158114611ea357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156122905761229061223a565b02949350505050565b600067ffffffffffffffff808416806122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561230a5761230a61223a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156123545761235461223a565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061220d60a0830184611e46565b6000602082840312156123b857600080fd5b8151611ea381611d2c565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526123fc6080830185611e46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261245860c0830184611e46565b9897505050505050505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620015b71760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6121a3806200029e6000396000f3fe60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a", + "deployedCode": "0x60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3733,7 +3733,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3741,7 +3741,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3749,7 +3749,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3757,7 +3757,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3765,7 +3765,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -3773,7 +3773,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": true, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -3781,7 +3781,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3789,7 +3789,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3797,7 +3797,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3805,7 +3805,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3813,7 +3813,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3821,7 +3821,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3829,7 +3829,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3837,7 +3837,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3845,7 +3845,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3853,7 +3853,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3861,7 +3861,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3869,7 +3869,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3877,7 +3877,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3885,7 +3885,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3914,7 +3914,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3928,7 +3928,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -3940,7 +3940,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3954,7 +3954,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -3966,7 +3966,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3980,7 +3980,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3992,7 +3992,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4006,7 +4006,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4018,7 +4018,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4032,7 +4032,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5373,7 +5373,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620006371760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6131e4806200025b6000396000f3fe6080604052600436106101b05760003560e01c80635c975abb116100ec5780639a2ac6d51161008a578063c0c53b8b11610064578063c0c53b8b146105c2578063c89701a2146105e2578063d84447151461060f578063e11013dd1461062457600080fd5b80639a2ac6d51461057c578063a9f9e6751461058f578063b1a1a882146105af57600080fd5b806387087623116100c657806387087623146104eb5780638f601f661461050b57806391c49bf8146104a0578063927ede2d1461055157600080fd5b80635c975abb1461048b5780637f46ddb2146104a0578063838b2520146104cb57600080fd5b806335e80ab311610159578063540abf7311610133578063540abf73146103e057806354fd4d5014610400578063550fcdc91461045657806358a997f61461046b57600080fd5b806335e80ab3146103435780633cb747bf146103705780634397dfef1461039d57600080fd5b80631635f5fd1161018a5780631635f5fd146102b457806321326849146102c757806333d7e2bd146102f157600080fd5b80630166a07a1461026e57806309fc88431461028e5780631532ec34146102a157600080fd5b3661026957333b15610249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610267333362030d4060405180602001604052806000815250610653565b005b600080fd5b34801561027a57600080fd5b50610267610289366004612ad9565b610666565b61026761029c366004612b8a565b610a80565b6102676102af366004612bdd565b610b57565b6102676102c2366004612bdd565b610b6b565b3480156102d357600080fd5b506102dc6110c9565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5060335461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e8565b34801561034f57600080fd5b5060325461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037c57600080fd5b5060035461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103b2611108565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102e8565b3480156103ec57600080fd5b506102676103fb366004612c50565b6111a5565b34801561040c57600080fd5b506104496040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e89190612d3d565b34801561046257600080fd5b506104496111ea565b34801561047757600080fd5b50610267610486366004612d50565b6112a5565b34801561049757600080fd5b506102dc611379565b3480156104ac57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661031e565b3480156104d757600080fd5b506102676104e6366004612c50565b61140d565b3480156104f757600080fd5b50610267610506366004612d50565b611452565b34801561051757600080fd5b50610543610526366004612dd3565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e8565b34801561055d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661031e565b61026761058a366004612e0c565b611526565b34801561059b57600080fd5b506102676105aa366004612ad9565b611568565b6102676105bd366004612b8a565b611577565b3480156105ce57600080fd5b506102676105dd366004612e6f565b611648565b3480156105ee57600080fd5b5060045461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061b57600080fd5b50610449611847565b610267610632366004612e0c565b6118b7565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61066084843485856118fa565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610739575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107219190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b6107eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b6107f3611379565b1561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b61086387611b59565b156109b1576108728787611bbb565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050610a33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109ef908490612f06565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a33908585611cdb565b610a77878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611daf92505050565b50505050505050565b333b15610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b523333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b505050565b610b648585858585610b6b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c3e575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b610cf8611379565b15610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b610d676110c9565b15610df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610240565b3073ffffffffffffffffffffffffffffffffffffffff851603610f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610240565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610240565b61101585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3d92505050565b6000611032855a8660405180602001604052806000815250611eb0565b9050806110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610240565b505050505050565b6000806110d4611108565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612f1d565b90939092509050565b610a7787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b603354604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112a09190810190612f81565b905090565b333b15611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613041565b610a7787873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b333b156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b61066033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b610a7787878787878787610666565b333b15611606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b5233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b600054610100900460ff16158080156116685750600054600160ff909116105b806116825750303b158015611682575060005460ff166001145b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610240565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561176c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556117df84734200000000000000000000000000000000000010612204565b801561066057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b603354604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b6106603385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b6119026110c9565b1561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610240565b611a2a858585846122ee565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a8d908b908b9086908a90602401613063565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b20929188906004016130ac565b6000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050505050505050565b6000611b85827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80611bb55750611bb5827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b92915050565b6000611be7837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611c90578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611bb5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b529084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612384565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611e27939291906130f1565b60405180910390a46110c1868686868686612490565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e9c92919061312f565b60405180910390a361066084848484612518565b600080600080845160208601878a8af19695505050505050565b611ed387611b59565b1561202157611ee28787611bbb565b611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506120b5565b61204373ffffffffffffffffffffffffffffffffffffffff8816863086612585565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054612081908490613148565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6120c38787878787866125e3565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090612127908b908d908c908c908c908b90602401613160565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526121ba929187906004016130ac565b600060405180830381600087803b1580156121d457600080fd5b505af11580156121e8573d6000803e3d6000fd5b5050505050505050505050565b610a7787878787878787611eca565b600054610100900460ff1661229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610240565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161234d92919061312f565b60405180910390a361066084848484612671565b600061236c836126d0565b801561237d575061237d8383612734565b9392505050565b60006123e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128039092919063ffffffff16565b805190915015610b5257808060200190518101906124049190613041565b610b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610240565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051612508939291906130f1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161257792919061312f565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161265b939291906130f1565b60405180910390a46110c186868686868661281a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161257792919061312f565b60006126fc827f01ffc9a700000000000000000000000000000000000000000000000000000000612734565b8015611bb5575061272d827fffffffff00000000000000000000000000000000000000000000000000000000612734565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156127ec575060208210155b80156127f85750600081115b979650505050505050565b60606128128484600085612892565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051612508939291906130f1565b606082471015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610240565b73ffffffffffffffffffffffffffffffffffffffff85163b6129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610240565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129cb91906131bb565b60006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b50915091506127f882828660608315612a2757508161237d565b825115612a375782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102409190612d3d565b73ffffffffffffffffffffffffffffffffffffffff81168114612a8d57600080fd5b50565b60008083601f840112612aa257600080fd5b50813567ffffffffffffffff811115612aba57600080fd5b602083019150836020828501011115612ad257600080fd5b9250929050565b600080600080600080600060c0888a031215612af457600080fd5b8735612aff81612a6b565b96506020880135612b0f81612a6b565b95506040880135612b1f81612a6b565b94506060880135612b2f81612a6b565b93506080880135925060a088013567ffffffffffffffff811115612b5257600080fd5b612b5e8a828b01612a90565b989b979a50959850939692959293505050565b803563ffffffff81168114612b8557600080fd5b919050565b600080600060408486031215612b9f57600080fd5b612ba884612b71565b9250602084013567ffffffffffffffff811115612bc457600080fd5b612bd086828701612a90565b9497909650939450505050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612a6b565b94506020860135612c1081612a6b565b935060408601359250606086013567ffffffffffffffff811115612c3357600080fd5b612c3f88828901612a90565b969995985093965092949392505050565b600080600080600080600060c0888a031215612c6b57600080fd5b8735612c7681612a6b565b96506020880135612c8681612a6b565b95506040880135612c9681612a6b565b945060608801359350612cab60808901612b71565b925060a088013567ffffffffffffffff811115612b5257600080fd5b60005b83811015612ce2578181015183820152602001612cca565b838111156106605750506000910152565b60008151808452612d0b816020860160208601612cc7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184612cf3565b60008060008060008060a08789031215612d6957600080fd5b8635612d7481612a6b565b95506020870135612d8481612a6b565b945060408701359350612d9960608801612b71565b9250608087013567ffffffffffffffff811115612db557600080fd5b612dc189828a01612a90565b979a9699509497509295939492505050565b60008060408385031215612de657600080fd5b8235612df181612a6b565b91506020830135612e0181612a6b565b809150509250929050565b60008060008060608587031215612e2257600080fd5b8435612e2d81612a6b565b9350612e3b60208601612b71565b9250604085013567ffffffffffffffff811115612e5757600080fd5b612e6387828801612a90565b95989497509550505050565b600080600060608486031215612e8457600080fd5b8335612e8f81612a6b565b92506020840135612e9f81612a6b565b91506040840135612eaf81612a6b565b809150509250925092565b600060208284031215612ecc57600080fd5b815161237d81612a6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f1857612f18612ed7565b500390565b60008060408385031215612f3057600080fd5b8251612f3b81612a6b565b602084015190925060ff81168114612e0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f9357600080fd5b815167ffffffffffffffff80821115612fab57600080fd5b818401915084601f830112612fbf57600080fd5b815181811115612fd157612fd1612f52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561301757613017612f52565b8160405282815287602084870101111561303057600080fd5b6127f8836020830160208801612cc7565b60006020828403121561305357600080fd5b8151801515811461237d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130a26080830184612cf3565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130db6060830185612cf3565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006131266060830184612cf3565b95945050505050565b8281526040602082015260006128126040830184612cf3565b6000821982111561315b5761315b612ed7565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526131af60c0830184612cf3565b98975050505050505050565b600082516131cd818460208701612cc7565b919091019291505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f21806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -5385,13 +5385,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620006371760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b6131e4806200025b6000396000f3fe6080604052600436106101b05760003560e01c80635c975abb116100ec5780639a2ac6d51161008a578063c0c53b8b11610064578063c0c53b8b146105c2578063c89701a2146105e2578063d84447151461060f578063e11013dd1461062457600080fd5b80639a2ac6d51461057c578063a9f9e6751461058f578063b1a1a882146105af57600080fd5b806387087623116100c657806387087623146104eb5780638f601f661461050b57806391c49bf8146104a0578063927ede2d1461055157600080fd5b80635c975abb1461048b5780637f46ddb2146104a0578063838b2520146104cb57600080fd5b806335e80ab311610159578063540abf7311610133578063540abf73146103e057806354fd4d5014610400578063550fcdc91461045657806358a997f61461046b57600080fd5b806335e80ab3146103435780633cb747bf146103705780634397dfef1461039d57600080fd5b80631635f5fd1161018a5780631635f5fd146102b457806321326849146102c757806333d7e2bd146102f157600080fd5b80630166a07a1461026e57806309fc88431461028e5780631532ec34146102a157600080fd5b3661026957333b15610249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610267333362030d4060405180602001604052806000815250610653565b005b600080fd5b34801561027a57600080fd5b50610267610289366004612ad9565b610666565b61026761029c366004612b8a565b610a80565b6102676102af366004612bdd565b610b57565b6102676102c2366004612bdd565b610b6b565b3480156102d357600080fd5b506102dc6110c9565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5060335461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e8565b34801561034f57600080fd5b5060325461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037c57600080fd5b5060035461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103b2611108565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102e8565b3480156103ec57600080fd5b506102676103fb366004612c50565b6111a5565b34801561040c57600080fd5b506104496040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e89190612d3d565b34801561046257600080fd5b506104496111ea565b34801561047757600080fd5b50610267610486366004612d50565b6112a5565b34801561049757600080fd5b506102dc611379565b3480156104ac57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661031e565b3480156104d757600080fd5b506102676104e6366004612c50565b61140d565b3480156104f757600080fd5b50610267610506366004612d50565b611452565b34801561051757600080fd5b50610543610526366004612dd3565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e8565b34801561055d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661031e565b61026761058a366004612e0c565b611526565b34801561059b57600080fd5b506102676105aa366004612ad9565b611568565b6102676105bd366004612b8a565b611577565b3480156105ce57600080fd5b506102676105dd366004612e6f565b611648565b3480156105ee57600080fd5b5060045461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061b57600080fd5b50610449611847565b610267610632366004612e0c565b6118b7565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61066084843485856118fa565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610739575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107219190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b6107eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b6107f3611379565b1561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b61086387611b59565b156109b1576108728787611bbb565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050610a33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109ef908490612f06565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a33908585611cdb565b610a77878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611daf92505050565b50505050505050565b333b15610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b523333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b505050565b610b648585858585610b6b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c3e575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b610cf8611379565b15610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b610d676110c9565b15610df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610240565b3073ffffffffffffffffffffffffffffffffffffffff851603610f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610240565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610240565b61101585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3d92505050565b6000611032855a8660405180602001604052806000815250611eb0565b9050806110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610240565b505050505050565b6000806110d4611108565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612f1d565b90939092509050565b610a7787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b603354604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112a09190810190612f81565b905090565b333b15611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613041565b610a7787873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b333b156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b61066033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b610a7787878787878787610666565b333b15611606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b5233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b600054610100900460ff16158080156116685750600054600160ff909116105b806116825750303b158015611682575060005460ff166001145b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610240565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561176c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556117df84734200000000000000000000000000000000000010612204565b801561066057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b603354604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b6106603385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b6119026110c9565b1561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610240565b611a2a858585846122ee565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a8d908b908b9086908a90602401613063565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b20929188906004016130ac565b6000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050505050505050565b6000611b85827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80611bb55750611bb5827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b92915050565b6000611be7837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611c90578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611bb5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b529084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612384565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611e27939291906130f1565b60405180910390a46110c1868686868686612490565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e9c92919061312f565b60405180910390a361066084848484612518565b600080600080845160208601878a8af19695505050505050565b611ed387611b59565b1561202157611ee28787611bbb565b611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506120b5565b61204373ffffffffffffffffffffffffffffffffffffffff8816863086612585565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054612081908490613148565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6120c38787878787866125e3565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090612127908b908d908c908c908c908b90602401613160565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526121ba929187906004016130ac565b600060405180830381600087803b1580156121d457600080fd5b505af11580156121e8573d6000803e3d6000fd5b5050505050505050505050565b610a7787878787878787611eca565b600054610100900460ff1661229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610240565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161234d92919061312f565b60405180910390a361066084848484612671565b600061236c836126d0565b801561237d575061237d8383612734565b9392505050565b60006123e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128039092919063ffffffff16565b805190915015610b5257808060200190518101906124049190613041565b610b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610240565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051612508939291906130f1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161257792919061312f565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161265b939291906130f1565b60405180910390a46110c186868686868661281a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161257792919061312f565b60006126fc827f01ffc9a700000000000000000000000000000000000000000000000000000000612734565b8015611bb5575061272d827fffffffff00000000000000000000000000000000000000000000000000000000612734565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156127ec575060208210155b80156127f85750600081115b979650505050505050565b60606128128484600085612892565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051612508939291906130f1565b606082471015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610240565b73ffffffffffffffffffffffffffffffffffffffff85163b6129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610240565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129cb91906131bb565b60006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b50915091506127f882828660608315612a2757508161237d565b825115612a375782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102409190612d3d565b73ffffffffffffffffffffffffffffffffffffffff81168114612a8d57600080fd5b50565b60008083601f840112612aa257600080fd5b50813567ffffffffffffffff811115612aba57600080fd5b602083019150836020828501011115612ad257600080fd5b9250929050565b600080600080600080600060c0888a031215612af457600080fd5b8735612aff81612a6b565b96506020880135612b0f81612a6b565b95506040880135612b1f81612a6b565b94506060880135612b2f81612a6b565b93506080880135925060a088013567ffffffffffffffff811115612b5257600080fd5b612b5e8a828b01612a90565b989b979a50959850939692959293505050565b803563ffffffff81168114612b8557600080fd5b919050565b600080600060408486031215612b9f57600080fd5b612ba884612b71565b9250602084013567ffffffffffffffff811115612bc457600080fd5b612bd086828701612a90565b9497909650939450505050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612a6b565b94506020860135612c1081612a6b565b935060408601359250606086013567ffffffffffffffff811115612c3357600080fd5b612c3f88828901612a90565b969995985093965092949392505050565b600080600080600080600060c0888a031215612c6b57600080fd5b8735612c7681612a6b565b96506020880135612c8681612a6b565b95506040880135612c9681612a6b565b945060608801359350612cab60808901612b71565b925060a088013567ffffffffffffffff811115612b5257600080fd5b60005b83811015612ce2578181015183820152602001612cca565b838111156106605750506000910152565b60008151808452612d0b816020860160208601612cc7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184612cf3565b60008060008060008060a08789031215612d6957600080fd5b8635612d7481612a6b565b95506020870135612d8481612a6b565b945060408701359350612d9960608801612b71565b9250608087013567ffffffffffffffff811115612db557600080fd5b612dc189828a01612a90565b979a9699509497509295939492505050565b60008060408385031215612de657600080fd5b8235612df181612a6b565b91506020830135612e0181612a6b565b809150509250929050565b60008060008060608587031215612e2257600080fd5b8435612e2d81612a6b565b9350612e3b60208601612b71565b9250604085013567ffffffffffffffff811115612e5757600080fd5b612e6387828801612a90565b95989497509550505050565b600080600060608486031215612e8457600080fd5b8335612e8f81612a6b565b92506020840135612e9f81612a6b565b91506040840135612eaf81612a6b565b809150509250925092565b600060208284031215612ecc57600080fd5b815161237d81612a6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f1857612f18612ed7565b500390565b60008060408385031215612f3057600080fd5b8251612f3b81612a6b565b602084015190925060ff81168114612e0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f9357600080fd5b815167ffffffffffffffff80821115612fab57600080fd5b818401915084601f830112612fbf57600080fd5b815181811115612fd157612fd1612f52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561301757613017612f52565b8160405282815287602084870101111561303057600080fd5b6127f8836020830160208801612cc7565b60006020828403121561305357600080fd5b8151801515811461237d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130a26080830184612cf3565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130db6060830185612cf3565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006131266060830184612cf3565b95945050505050565b8281526040602082015260006128126040830184612cf3565b6000821982111561315b5761315b612ed7565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526131af60c0830184612cf3565b98975050505050505050565b600082516131cd818460208701612cc7565b919091019291505056fea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101b05760003560e01c80635c975abb116100ec5780639a2ac6d51161008a578063c0c53b8b11610064578063c0c53b8b146105c2578063c89701a2146105e2578063d84447151461060f578063e11013dd1461062457600080fd5b80639a2ac6d51461057c578063a9f9e6751461058f578063b1a1a882146105af57600080fd5b806387087623116100c657806387087623146104eb5780638f601f661461050b57806391c49bf8146104a0578063927ede2d1461055157600080fd5b80635c975abb1461048b5780637f46ddb2146104a0578063838b2520146104cb57600080fd5b806335e80ab311610159578063540abf7311610133578063540abf73146103e057806354fd4d5014610400578063550fcdc91461045657806358a997f61461046b57600080fd5b806335e80ab3146103435780633cb747bf146103705780634397dfef1461039d57600080fd5b80631635f5fd1161018a5780631635f5fd146102b457806321326849146102c757806333d7e2bd146102f157600080fd5b80630166a07a1461026e57806309fc88431461028e5780631532ec34146102a157600080fd5b3661026957333b15610249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610267333362030d4060405180602001604052806000815250610653565b005b600080fd5b34801561027a57600080fd5b50610267610289366004612ad9565b610666565b61026761029c366004612b8a565b610a80565b6102676102af366004612bdd565b610b57565b6102676102c2366004612bdd565b610b6b565b3480156102d357600080fd5b506102dc6110c9565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5060335461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e8565b34801561034f57600080fd5b5060325461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037c57600080fd5b5060035461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103b2611108565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102e8565b3480156103ec57600080fd5b506102676103fb366004612c50565b6111a5565b34801561040c57600080fd5b506104496040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e89190612d3d565b34801561046257600080fd5b506104496111ea565b34801561047757600080fd5b50610267610486366004612d50565b6112a5565b34801561049757600080fd5b506102dc611379565b3480156104ac57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661031e565b3480156104d757600080fd5b506102676104e6366004612c50565b61140d565b3480156104f757600080fd5b50610267610506366004612d50565b611452565b34801561051757600080fd5b50610543610526366004612dd3565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e8565b34801561055d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661031e565b61026761058a366004612e0c565b611526565b34801561059b57600080fd5b506102676105aa366004612ad9565b611568565b6102676105bd366004612b8a565b611577565b3480156105ce57600080fd5b506102676105dd366004612e6f565b611648565b3480156105ee57600080fd5b5060045461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061b57600080fd5b50610449611847565b610267610632366004612e0c565b6118b7565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61066084843485856118fa565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610739575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107219190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b6107eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b6107f3611379565b1561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b61086387611b59565b156109b1576108728787611bbb565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050610a33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109ef908490612f06565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a33908585611cdb565b610a77878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611daf92505050565b50505050505050565b333b15610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b523333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b505050565b610b648585858585610b6b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c3e575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b610cf8611379565b15610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b610d676110c9565b15610df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610240565b3073ffffffffffffffffffffffffffffffffffffffff851603610f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610240565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610240565b61101585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3d92505050565b6000611032855a8660405180602001604052806000815250611eb0565b9050806110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610240565b505050505050565b6000806110d4611108565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612f1d565b90939092509050565b610a7787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b603354604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112a09190810190612f81565b905090565b333b15611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613041565b610a7787873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b333b156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b61066033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b610a7787878787878787610666565b333b15611606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b5233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b600054610100900460ff16158080156116685750600054600160ff909116105b806116825750303b158015611682575060005460ff166001145b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610240565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561176c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556117df84734200000000000000000000000000000000000010612204565b801561066057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b603354604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b6106603385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b6119026110c9565b1561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610240565b611a2a858585846122ee565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a8d908b908b9086908a90602401613063565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b20929188906004016130ac565b6000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050505050505050565b6000611b85827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80611bb55750611bb5827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b92915050565b6000611be7837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611c90578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611bb5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b529084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612384565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611e27939291906130f1565b60405180910390a46110c1868686868686612490565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e9c92919061312f565b60405180910390a361066084848484612518565b600080600080845160208601878a8af19695505050505050565b611ed387611b59565b1561202157611ee28787611bbb565b611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506120b5565b61204373ffffffffffffffffffffffffffffffffffffffff8816863086612585565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054612081908490613148565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6120c38787878787866125e3565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090612127908b908d908c908c908c908b90602401613160565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526121ba929187906004016130ac565b600060405180830381600087803b1580156121d457600080fd5b505af11580156121e8573d6000803e3d6000fd5b5050505050505050505050565b610a7787878787878787611eca565b600054610100900460ff1661229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610240565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161234d92919061312f565b60405180910390a361066084848484612671565b600061236c836126d0565b801561237d575061237d8383612734565b9392505050565b60006123e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128039092919063ffffffff16565b805190915015610b5257808060200190518101906124049190613041565b610b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610240565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051612508939291906130f1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161257792919061312f565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161265b939291906130f1565b60405180910390a46110c186868686868661281a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161257792919061312f565b60006126fc827f01ffc9a700000000000000000000000000000000000000000000000000000000612734565b8015611bb5575061272d827fffffffff00000000000000000000000000000000000000000000000000000000612734565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156127ec575060208210155b80156127f85750600081115b979650505050505050565b60606128128484600085612892565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051612508939291906130f1565b606082471015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610240565b73ffffffffffffffffffffffffffffffffffffffff85163b6129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610240565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129cb91906131bb565b60006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b50915091506127f882828660608315612a2757508161237d565b825115612a375782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102409190612d3d565b73ffffffffffffffffffffffffffffffffffffffff81168114612a8d57600080fd5b50565b60008083601f840112612aa257600080fd5b50813567ffffffffffffffff811115612aba57600080fd5b602083019150836020828501011115612ad257600080fd5b9250929050565b600080600080600080600060c0888a031215612af457600080fd5b8735612aff81612a6b565b96506020880135612b0f81612a6b565b95506040880135612b1f81612a6b565b94506060880135612b2f81612a6b565b93506080880135925060a088013567ffffffffffffffff811115612b5257600080fd5b612b5e8a828b01612a90565b989b979a50959850939692959293505050565b803563ffffffff81168114612b8557600080fd5b919050565b600080600060408486031215612b9f57600080fd5b612ba884612b71565b9250602084013567ffffffffffffffff811115612bc457600080fd5b612bd086828701612a90565b9497909650939450505050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612a6b565b94506020860135612c1081612a6b565b935060408601359250606086013567ffffffffffffffff811115612c3357600080fd5b612c3f88828901612a90565b969995985093965092949392505050565b600080600080600080600060c0888a031215612c6b57600080fd5b8735612c7681612a6b565b96506020880135612c8681612a6b565b95506040880135612c9681612a6b565b945060608801359350612cab60808901612b71565b925060a088013567ffffffffffffffff811115612b5257600080fd5b60005b83811015612ce2578181015183820152602001612cca565b838111156106605750506000910152565b60008151808452612d0b816020860160208601612cc7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184612cf3565b60008060008060008060a08789031215612d6957600080fd5b8635612d7481612a6b565b95506020870135612d8481612a6b565b945060408701359350612d9960608801612b71565b9250608087013567ffffffffffffffff811115612db557600080fd5b612dc189828a01612a90565b979a9699509497509295939492505050565b60008060408385031215612de657600080fd5b8235612df181612a6b565b91506020830135612e0181612a6b565b809150509250929050565b60008060008060608587031215612e2257600080fd5b8435612e2d81612a6b565b9350612e3b60208601612b71565b9250604085013567ffffffffffffffff811115612e5757600080fd5b612e6387828801612a90565b95989497509550505050565b600080600060608486031215612e8457600080fd5b8335612e8f81612a6b565b92506020840135612e9f81612a6b565b91506040840135612eaf81612a6b565b809150509250925092565b600060208284031215612ecc57600080fd5b815161237d81612a6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f1857612f18612ed7565b500390565b60008060408385031215612f3057600080fd5b8251612f3b81612a6b565b602084015190925060ff81168114612e0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f9357600080fd5b815167ffffffffffffffff80821115612fab57600080fd5b818401915084601f830112612fbf57600080fd5b815181811115612fd157612fd1612f52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561301757613017612f52565b8160405282815287602084870101111561303057600080fd5b6127f8836020830160208801612cc7565b60006020828403121561305357600080fd5b8151801515811461237d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130a26080830184612cf3565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130db6060830185612cf3565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006131266060830184612cf3565b95945050505050565b8281526040602082015260006128126040830184612cf3565b6000821982111561315b5761315b612ed7565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526131af60c0830184612cf3565b98975050505050505050565b600082516131cd818460208701612cc7565b919091019291505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f21806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", + "deployedCode": "0x6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -5399,7 +5399,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5407,7 +5407,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5415,7 +5415,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5423,7 +5423,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5431,7 +5431,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5439,7 +5439,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5447,7 +5447,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5455,7 +5455,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5463,7 +5463,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5471,7 +5471,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5479,7 +5479,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5487,7 +5487,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5495,7 +5495,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5503,7 +5503,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5511,7 +5511,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5519,7 +5519,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5527,7 +5527,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5556,7 +5556,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5570,7 +5570,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5582,7 +5582,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5596,7 +5596,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5608,7 +5608,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5622,7 +5622,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5634,7 +5634,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5648,7 +5648,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5660,7 +5660,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5674,7 +5674,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -7978,7 +7978,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb741300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8004,7 +8004,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb741300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -8070,7 +8070,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb741300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8137,7 +8137,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8156,7 +8156,7 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -8234,8 +8234,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", - "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8244,7 +8244,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8466,8 +8466,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", - "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8476,7 +8476,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8561,8 +8561,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", - "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8571,7 +8571,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8665,8 +8665,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", - "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8675,7 +8675,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8769,8 +8769,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", - "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8779,7 +8779,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8873,8 +8873,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", - "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8883,7 +8883,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8977,8 +8977,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", - "previousValue": "0x000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413", + "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8987,7 +8987,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413", + "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9873,7 +9873,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x238181ae0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "data": "0x238181ae000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", "deployedCode": "0x", "initialized": true, "kind": "StaticCall", @@ -9887,7 +9887,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xf1f0527c387649edea64c011da8ef7954d582b390ce3a6ee3a48756b3a12ade3" + "slot": "0xeda6be1d2f490d5ea6156bde71fc67ebaa485e03a0acbba88a696f9a54c7b9ae" }, { "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", @@ -9895,7 +9895,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xf1f0527c387649edea64c011da8ef7954d582b390ce3a6ee3a48756b3a12ade3" + "slot": "0xeda6be1d2f490d5ea6156bde71fc67ebaa485e03a0acbba88a696f9a54c7b9ae" } ], "value": 0 @@ -10083,7 +10083,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c7300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10109,7 +10109,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c7300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -10175,7 +10175,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c7300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10274,7 +10274,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b2ea4bd00000000000000000000000000000000000000000000000000000000000000400000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", + "data": "0x9b2ea4bd0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10301,7 +10301,7 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": true, - "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" @@ -10361,8 +10361,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", - "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10371,7 +10371,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10599,8 +10599,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", - "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10609,7 +10609,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10676,8 +10676,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", - "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10686,7 +10686,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10762,8 +10762,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", - "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10772,7 +10772,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10848,8 +10848,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", - "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10858,7 +10858,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10934,8 +10934,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", - "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10944,7 +10944,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11020,8 +11020,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", - "previousValue": "0x0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb", + "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -11030,7 +11030,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x8138C9dbFc8ea04E27856B1574cDA032565772eB", + "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", "chainInfo": { "chainId": 31337, "forkId": 0 diff --git a/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol index 081d0c97ddc..931e65bbb32 100644 --- a/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol @@ -56,20 +56,10 @@ contract L1CrossDomainMessenger is CrossDomainMessenger, ISemver { } /// @inheritdoc CrossDomainMessenger - function gasPayingToken() public view override returns (address _addr, uint8 _decimals) { + function gasPayingToken() internal view override returns (address _addr, uint8 _decimals) { (_addr, _decimals) = systemConfig.gasPayingToken(); } - /// @inheritdoc CrossDomainMessenger - function gasPayingTokenName() public view override returns (string memory name_) { - name_ = systemConfig.gasPayingTokenName(); - } - - /// @inheritdoc CrossDomainMessenger - function gasPayingTokenSymbol() public view override returns (string memory symbol_) { - symbol_ = systemConfig.gasPayingTokenSymbol(); - } - /// @notice Getter function for the OptimismPortal contract on this chain. /// Public getter is legacy and will be removed in the future. Use `portal()` instead. /// @return Contract of the OptimismPortal on this chain. diff --git a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol index 74e596f1f01..2acd2ace4ac 100644 --- a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol +++ b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol @@ -120,20 +120,10 @@ contract L1StandardBridge is StandardBridge, ISemver { } /// @inheritdoc StandardBridge - function gasPayingToken() public view override returns (address addr_, uint8 decimals_) { + function gasPayingToken() internal view override returns (address addr_, uint8 decimals_) { (addr_, decimals_) = systemConfig.gasPayingToken(); } - /// @inheritdoc StandardBridge - function gasPayingTokenName() public view override returns (string memory name_) { - name_ = systemConfig.gasPayingTokenName(); - } - - /// @inheritdoc StandardBridge - function gasPayingTokenSymbol() public view override returns (string memory symbol_) { - symbol_ = systemConfig.gasPayingTokenSymbol(); - } - /// @custom:legacy /// @notice Deposits some amount of ETH into the sender's account on L2. /// @param _minGasLimit Minimum gas limit for the deposit message on L2. diff --git a/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol index e89f5b822f5..48e78063402 100644 --- a/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol @@ -47,20 +47,10 @@ contract L2CrossDomainMessenger is CrossDomainMessenger, ISemver { } /// @inheritdoc CrossDomainMessenger - function gasPayingToken() public view override returns (address addr_, uint8 decimals_) { + function gasPayingToken() internal view override returns (address addr_, uint8 decimals_) { (addr_, decimals_) = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingToken(); } - /// @inheritdoc CrossDomainMessenger - function gasPayingTokenName() public view override returns (string memory name_) { - name_ = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingTokenName(); - } - - /// @inheritdoc CrossDomainMessenger - function gasPayingTokenSymbol() public view override returns (string memory symbol_) { - symbol_ = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingTokenSymbol(); - } - /// @inheritdoc CrossDomainMessenger function _isOtherMessenger() internal view override returns (bool) { return AddressAliasHelper.undoL1ToL2Alias(msg.sender) == address(otherMessenger); diff --git a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol index 81d18b9d319..0a1928994e7 100644 --- a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol +++ b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol @@ -77,20 +77,10 @@ contract L2StandardBridge is StandardBridge, ISemver { } /// @inheritdoc StandardBridge - function gasPayingToken() public view override returns (address addr_, uint8 decimals_) { + function gasPayingToken() internal view override returns (address addr_, uint8 decimals_) { (addr_, decimals_) = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingToken(); } - /// @inheritdoc StandardBridge - function gasPayingTokenName() public view override returns (string memory name_) { - name_ = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingTokenName(); - } - - /// @inheritdoc StandardBridge - function gasPayingTokenSymbol() public view override returns (string memory symbol_) { - symbol_ = L1Block(Predeploys.L1_BLOCK_ATTRIBUTES).gasPayingTokenSymbol(); - } - /// @custom:legacy /// @notice Initiates a withdrawal from L2 to L1. /// This function only works with OptimismMintableERC20 tokens or ether. Use the diff --git a/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol b/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol index 5274f831c71..f45fc978632 100644 --- a/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol @@ -6,7 +6,6 @@ import { SafeCall } from "src/libraries/SafeCall.sol"; import { Hashing } from "src/libraries/Hashing.sol"; import { Encoding } from "src/libraries/Encoding.sol"; import { Constants } from "src/libraries/Constants.sol"; -import { IGasToken } from "src/libraries/GasPayingToken.sol"; /// @custom:legacy /// @title CrossDomainMessengerLegacySpacer0 @@ -88,8 +87,7 @@ contract CrossDomainMessengerLegacySpacer1 { abstract contract CrossDomainMessenger is CrossDomainMessengerLegacySpacer0, Initializable, - CrossDomainMessengerLegacySpacer1, - IGasToken + CrossDomainMessengerLegacySpacer1 { /// @notice Current message version identifier. uint16 public constant MESSAGE_VERSION = 1; @@ -364,18 +362,11 @@ abstract contract CrossDomainMessenger is + RELAY_GAS_CHECK_BUFFER; } - /// @inheritdoc IGasToken - /// @notice Must be implemented by the contracts that inherit it. - function gasPayingToken() public view virtual returns (address, uint8); + /// @notice Returns the address of the custom gas token and the token's decimals. + function gasPayingToken() internal view virtual returns (address, uint8); - /// @inheritdoc IGasToken - function gasPayingTokenName() public view virtual returns (string memory); - - /// @inheritdoc IGasToken - function gasPayingTokenSymbol() public view virtual returns (string memory); - - /// @inheritdoc IGasToken - function isCustomGasToken() public view returns (bool) { + /// @notice Returns whether the chain uses a custom gas token or not. + function isCustomGasToken() internal view returns (bool) { (address token,) = gasPayingToken(); return token != Constants.ETHER; } diff --git a/packages/contracts-bedrock/src/universal/StandardBridge.sol b/packages/contracts-bedrock/src/universal/StandardBridge.sol index 2c54fe50a24..903e9730a0f 100644 --- a/packages/contracts-bedrock/src/universal/StandardBridge.sol +++ b/packages/contracts-bedrock/src/universal/StandardBridge.sol @@ -11,14 +11,13 @@ import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; import { OptimismMintableERC20 } from "src/universal/OptimismMintableERC20.sol"; import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import { Constants } from "src/libraries/Constants.sol"; -import { IGasToken } from "src/libraries/GasPayingToken.sol"; /// @custom:upgradeable /// @title StandardBridge /// @notice StandardBridge is a base contract for the L1 and L2 standard ERC20 bridges. It handles /// the core bridging logic, including escrowing tokens that are native to the local chain /// and minting/burning tokens that are native to the remote chain. -abstract contract StandardBridge is Initializable, IGasToken { +abstract contract StandardBridge is Initializable { using SafeERC20 for IERC20; /// @notice The L2 gas limit set when eth is depoisited using the receive() function. @@ -131,18 +130,11 @@ abstract contract StandardBridge is Initializable, IGasToken { /// Must be implemented by contracts that inherit. receive() external payable virtual; - /// @inheritdoc IGasToken - function gasPayingToken() public view virtual returns (address, uint8); + /// @notice Returns the address of the custom gas token and the token's decimals. + function gasPayingToken() internal view virtual returns (address, uint8); - /// @inheritdoc IGasToken - function gasPayingTokenName() public view virtual returns (string memory); - - /// @inheritdoc IGasToken - function gasPayingTokenSymbol() public view virtual returns (string memory); - - /// @notice Getter for custom gas token paying networks. Returns true if the - /// network uses a custom gas token. - function isCustomGasToken() public view returns (bool) { + /// @notice Returns whether the chain uses a custom gas token or not. + function isCustomGasToken() internal view returns (bool) { (address token,) = gasPayingToken(); return token != Constants.ETHER; } diff --git a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol index ed170b47f7c..634434dc085 100644 --- a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol @@ -621,43 +621,12 @@ contract L1CrossDomainMessenger_Test is Bridge_Initializer { assertEq(l1CrossDomainMessenger.paused(), superchainConfig.paused()); } - /// @dev Tests that gasPayingToken returns the correct values for ETH. - function test_gasPayingToken_ether_succeeds() external view { - (address token, uint8 decimals) = l1CrossDomainMessenger.gasPayingToken(); - assertEq(token, address(Constants.ETHER)); - assertEq(decimals, 18); - } - - /// @dev Tests that gasPayingToken returns the correct values for non-ETH tokens. - function test_gasPayingToken_nonEther_succeeds() external { - vm.mockCall( - address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) - ); - (address token, uint8 decimals) = l1CrossDomainMessenger.gasPayingToken(); - assertEq(token, address(1)); - assertEq(decimals, 2); - } - - /// @dev Tests that isCustomGasToken returns the correct value for ETH as the gas token. - function test_isCustomGasToken_ether_succeeds() external view { - assertFalse(l1CrossDomainMessenger.isCustomGasToken()); - } - - /// @dev Tests that isCustomGasToken returns the correct value for non-ETH as the gas token. - function test_isCustomGasToken_nonEther_succeeds() external { - vm.mockCall( - address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) - ); - assertTrue(l1CrossDomainMessenger.isCustomGasToken()); - } - /// @dev Tests that sendMessage succeeds with a custom gas token when the call value is zero. function test_sendMessage_customGasToken_noValue_succeeds() external { // Mock the gasPayingToken function to return a custom gas token vm.mockCall( address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) ); - assertTrue(l1CrossDomainMessenger.isCustomGasToken()); // deposit transaction on the optimism portal should be called vm.expectCall( @@ -704,7 +673,6 @@ contract L1CrossDomainMessenger_Test is Bridge_Initializer { vm.mockCall( address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) ); - assertTrue(l1CrossDomainMessenger.isCustomGasToken()); vm.expectRevert("CrossDomainMessenger: cannot send value with custom gas token"); l1CrossDomainMessenger.sendMessage{ value: 1 }(recipient, hex"aa", uint32(500_000)); @@ -716,7 +684,6 @@ contract L1CrossDomainMessenger_Test is Bridge_Initializer { vm.mockCall( address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) ); - assertTrue(l1CrossDomainMessenger.isCustomGasToken()); address target = address(0xabcd); address sender = Predeploys.L2_CROSS_DOMAIN_MESSENGER; @@ -757,7 +724,6 @@ contract L1CrossDomainMessenger_Test is Bridge_Initializer { vm.mockCall( address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) ); - assertTrue(l1CrossDomainMessenger.isCustomGasToken()); vm.expectRevert("CrossDomainMessenger: value must be zero unless message is from a system address"); l1CrossDomainMessenger.relayMessage{ value: 1 }( diff --git a/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol b/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol index e2cfe048a03..f0c8e61bcd8 100644 --- a/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol @@ -30,40 +30,6 @@ contract L1StandardBridge_Getter_Test is Bridge_Initializer { assert(l1StandardBridge.MESSENGER() == l1CrossDomainMessenger); assert(l1StandardBridge.superchainConfig() == superchainConfig); assert(l1StandardBridge.systemConfig() == systemConfig); - (address token, uint8 decimals) = l1StandardBridge.gasPayingToken(); - (address expectedToken, uint8 expectedDecimals) = systemConfig.gasPayingToken(); - assert(token == expectedToken); - assert(decimals == expectedDecimals); - } - - /// @dev Tests that the `isCustomGasToken` function returns the correct value when the gas token is ether. - function test_isCustomGasToken_ether_succeeds() external view { - assertFalse(l1StandardBridge.isCustomGasToken()); - } - - /// @dev Tests that the `isCustomGasToken` function returns the correct value when the gas token is not ether. - function test_isCustomGasToken_nonEther_succeeds() external { - vm.mockCall( - address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) - ); - assertTrue(l1StandardBridge.isCustomGasToken()); - } - - /// @dev Tests that gasPayingToken returns the correct values for ETH. - function test_gasPayingToken_ether_succeeds() external view { - (address token, uint8 decimals) = l1StandardBridge.gasPayingToken(); - assertEq(token, Constants.ETHER); - assertEq(decimals, 18); - } - - /// @dev Tests that gasPayingToken returns the correct values for non-ETH tokens. - function test_gasPayingToken_nonEther_succeeds() external { - vm.mockCall( - address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) - ); - (address token, uint8 decimals) = l1StandardBridge.gasPayingToken(); - assertEq(token, address(1)); - assertEq(decimals, 2); } } @@ -91,10 +57,6 @@ contract L1StandardBridge_Initialize_Test is Bridge_Initializer { assertEq(address(l1StandardBridge.otherBridge()), Predeploys.L2_STANDARD_BRIDGE); assertEq(address(l2StandardBridge), Predeploys.L2_STANDARD_BRIDGE); assertEq(address(l1StandardBridge.systemConfig()), address(systemConfig)); - (address token, uint8 decimals) = l1StandardBridge.gasPayingToken(); - (address expectedToken, uint8 expectedDecimals) = systemConfig.gasPayingToken(); - assertEq(token, expectedToken); - assertEq(decimals, expectedDecimals); } } diff --git a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol index f2fd3753bf4..c3805b99126 100644 --- a/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L2/L2CrossDomainMessenger.t.sol @@ -229,37 +229,10 @@ contract L2CrossDomainMessenger_Test is Bridge_Initializer { assertEq(l2CrossDomainMessenger.failedMessages(hash), true); } - /// @dev Tests that gasPayingToken returns the correct values for ETH. - function test_gasPayingToken_ether_succeeds() external view { - (address token, uint8 decimals) = l2CrossDomainMessenger.gasPayingToken(); - assertEq(token, address(Constants.ETHER)); - assertEq(decimals, 18); - } - - /// @dev Tests that gasPayingToken returns the correct values for non-ETH tokens. - function test_gasPayingToken_nonEther_succeeds() external { - vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); - (address token, uint8 decimals) = l2CrossDomainMessenger.gasPayingToken(); - assertEq(token, address(1)); - assertEq(decimals, 2); - } - - /// @dev Tests that isCustomGasToken returns the correct value for ETH as the gas token. - function test_isCustomGasToken_ether_succeeds() external view { - assertFalse(l2CrossDomainMessenger.isCustomGasToken()); - } - - /// @dev Tests that isCustomGasToken returns the correct value for non-ETH as the gas token. - function test_isCustomGasToken_nonEther_succeeds() external { - vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); - assertTrue(l2CrossDomainMessenger.isCustomGasToken()); - } - /// @dev Tests that sendMessage succeeds with a custom gas token when the call value is zero. function test_sendMessage_customGasToken_noValue_succeeds() external { // Mock the gasPayingToken function to return a custom gas token vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); - assertTrue(l2CrossDomainMessenger.isCustomGasToken()); bytes memory xDomainCallData = Encoding.encodeCrossDomainMessage(l2CrossDomainMessenger.messageNonce(), alice, recipient, 0, 100, hex"ff"); @@ -302,7 +275,6 @@ contract L2CrossDomainMessenger_Test is Bridge_Initializer { function test_sendMessage_customGasToken_withValue_reverts() external { // Mock the gasPayingToken function to return a custom gas token vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); - assertTrue(l2CrossDomainMessenger.isCustomGasToken()); vm.expectRevert("CrossDomainMessenger: cannot send value with custom gas token"); l2CrossDomainMessenger.sendMessage{ value: 1 }(recipient, hex"ff", uint32(100)); @@ -312,7 +284,6 @@ contract L2CrossDomainMessenger_Test is Bridge_Initializer { function test_relayMessage_customGasToken_noValue_succeeds() external { // Mock the gasPayingToken function to return a custom gas token vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); - assertTrue(l2CrossDomainMessenger.isCustomGasToken()); address target = address(0xabcd); address sender = address(l1CrossDomainMessenger); @@ -349,7 +320,6 @@ contract L2CrossDomainMessenger_Test is Bridge_Initializer { function test_relayMessage_customGasToken_withValue_reverts() external virtual { // Mock the gasPayingToken function to return a custom gas token vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); - assertTrue(l2CrossDomainMessenger.isCustomGasToken()); vm.expectRevert("CrossDomainMessenger: value must be zero unless message is from a system address"); l2CrossDomainMessenger.relayMessage{ value: 1 }( diff --git a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol index 2db58c91145..02bef2517c8 100644 --- a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol @@ -200,32 +200,6 @@ contract L2StandardBridge_Test is Bridge_Initializer { assertEq(Predeploys.L2_TO_L1_MESSAGE_PASSER.balance, 100); } - - /// @dev Tests that the `isCustomGasToken` function returns the correct value when the gas token is ether. - function test_isCustomGasToken_ether_succeeds() external view { - assertFalse(l2StandardBridge.isCustomGasToken()); - } - - /// @dev Tests that the `isCustomGasToken` function returns the correct value when the gas token is not ether. - function test_isCustomGasToken_nonEther_succeeds() external { - vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); - assertTrue(l2StandardBridge.isCustomGasToken()); - } - - /// @dev Tests that gasPayingToken returns the correct values for ETH. - function test_gasPayingToken_ether_succeeds() external view { - (address token, uint8 decimals) = l2StandardBridge.gasPayingToken(); - assertEq(token, Constants.ETHER); - assertEq(decimals, 18); - } - - /// @dev Tests that gasPayingToken returns the correct values for non-ETH tokens. - function test_gasPayingToken_nonEther_succeeds() external { - vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); - (address token, uint8 decimals) = l2StandardBridge.gasPayingToken(); - assertEq(token, address(1)); - assertEq(decimals, 2); - } } contract PreBridgeERC20 is Bridge_Initializer { diff --git a/packages/contracts-bedrock/test/invariants/CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/invariants/CrossDomainMessenger.t.sol index a83d71b2214..b0b64253493 100644 --- a/packages/contracts-bedrock/test/invariants/CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/invariants/CrossDomainMessenger.t.sol @@ -95,8 +95,6 @@ contract XDM_MinGasLimits is Bridge_Initializer { // Set up the `L1CrossDomainMessenger` and `OptimismPortal` contracts. super.setUp(); - assertFalse(l1CrossDomainMessenger.isCustomGasToken()); - // Deploy a relay actor actor = new RelayActor(optimismPortal, l1CrossDomainMessenger, vm, doFail); diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index 0183eb6d6b5..82af4166dbd 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -13,11 +13,11 @@ contract DeploymentSummary is DeploymentSummaryCode { Vm private constant vm = Vm(VM_ADDRESS); address internal constant addressManagerAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; - address internal constant l1CrossDomainMessengerAddress = 0x8138C9dbFc8ea04E27856B1574cDA032565772eB; + address internal constant l1CrossDomainMessengerAddress = 0x596ee4c67e4f7770b116faf6D8950d17A2e21C73; address internal constant l1CrossDomainMessengerProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; address internal constant l1ERC721BridgeAddress = 0x44637A4292E0CD2B17A55d5F6B2F05AFcAcD0586; address internal constant l1ERC721BridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant l1StandardBridgeAddress = 0x107Cb7dfCE15dBbF6704c6C4BF6D973c84CB7413; + address internal constant l1StandardBridgeAddress = 0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d; address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; @@ -344,7 +344,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000005"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000107cb7dfce15dbbf6704c6c4bf6d973c84cb7413"; + value = hex"000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -407,7 +407,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000009"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e"; - value = hex"0000000000000000000000008138c9dbfc8ea04e27856b1574cda032565772eb"; + value = hex"000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73"; vm.store(addressManagerAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000010000000000000000000000000000000000000000"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index ce123b02cb1..9eb66cc0e63 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -37,13 +37,13 @@ contract DeploymentSummaryCode { bytes internal constant optimismPortalCode = hex"60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; bytes internal constant l1CrossDomainMessengerCode = - hex"6080604052600436106101b75760003560e01c80635c975abb116100ec578063b1b1b2091161008a578063d764ad0b11610064578063d764ad0b14610534578063d844471514610547578063db505d801461055c578063ecc704281461058957600080fd5b8063b1b1b209146104c4578063b28ade25146104f4578063c0c53b8b1461051457600080fd5b806383a74074116100c657806383a74074146104525780638cbeeef2146103645780639fce812c14610469578063a4e7f8bd1461049457600080fd5b80635c975abb146103fb5780636425666b146104105780636e296e451461043d57600080fd5b80633dbb202b116101595780634c1d6a69116101335780634c1d6a691461036457806354fd4d501461037a578063550fcdc9146103d05780635644cfdf146103e557600080fd5b80633dbb202b146102e45780633f827a5a146102f95780634397dfef1461032157600080fd5b8063213268491161019557806321326849146102505780632828d7e81461027557806333d7e2bd1461028a57806335e80ab3146102b757600080fd5b8063028f85f7146101bc5780630c568498146101ef5780630ff754ea14610204575b600080fd5b3480156101c857600080fd5b506101d1601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b506101d1603f81565b34801561021057600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e6565b34801561025c57600080fd5b506102656105ee565b60405190151581526020016101e6565b34801561028157600080fd5b506101d1604081565b34801561029657600080fd5b5060fd5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102c357600080fd5b5060fb5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b6102f76102f2366004611db3565b61062d565b005b34801561030557600080fd5b5061030e600181565b60405161ffff90911681526020016101e6565b34801561032d57600080fd5b5061033661092a565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016101e6565b34801561037057600080fd5b506101d1619c4081565b34801561038657600080fd5b506103c36040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101e69190611e90565b3480156103dc57600080fd5b506103c36109c7565b3480156103f157600080fd5b506101d161138881565b34801561040757600080fd5b50610265610a82565b34801561041c57600080fd5b5060fc5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561044957600080fd5b5061022b610b16565b34801561045e57600080fd5b506101d162030d4081565b34801561047557600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff1661022b565b3480156104a057600080fd5b506102656104af366004611eaa565b60ce6020526000908152604090205460ff1681565b3480156104d057600080fd5b506102656104df366004611eaa565b60cb6020526000908152604090205460ff1681565b34801561050057600080fd5b506101d161050f366004611ec3565b610bfd565b34801561052057600080fd5b506102f761052f366004611f17565b610c6b565b6102f7610542366004611f62565b610ee2565b34801561055357600080fd5b506103c36117f7565b34801561056857600080fd5b5060cf5461022b9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561059557600080fd5b506105e060cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101e6565b6000806105f961092a565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6106356105ee565b156106cd5734156106cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107ff9073ffffffffffffffffffffffffffffffffffffffff166106f5858585610bfd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061076160cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c60405160240161077d9796959493929190612031565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611883565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561088460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b86604051610896959493929190612090565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561099a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109be91906120de565b90939092509050565b60fd54604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610a7d919081019061214d565b905090565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d9190612218565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff215301610be0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016106c4565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f610c19604063ffffffff8816612269565b610c239190612299565b610c2e601088612269565b610c3b9062030d406122e7565b610c4591906122e7565b610c4f91906122e7565b610c5991906122e7565b610c6391906122e7565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610cb6575060005460017401000000000000000000000000000000000000000090910460ff16105b80610ce85750303b158015610ce8575060005474010000000000000000000000000000000000000000900460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106c4565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610dfa57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610e7973420000000000000000000000000000000000000761191c565b8015610edc57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610eea610a82565b15610f51576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016106c4565b60f087901c6002811061100c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016106c4565b8061ffff1660000361110157600061105d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f9250611a58915050565b600081815260cb602052604090205490915060ff16156110ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016106c4565b505b6000611147898989898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a7792505050565b9050611151611a9a565b156111895785341461116557611165612313565b600081815260ce602052604090205460ff161561118457611184612313565b6112db565b341561123d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016106c4565b600081815260ce602052604090205460ff166112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016106c4565b6112e487611b76565b15611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016106c4565b600081815260cb602052604090205460ff1615611436576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016106c4565b61145785611448611388619c406122e7565b67ffffffffffffffff16611bbc565b158061147d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561159657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b50506117ee565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a16179055600061162788619c405a6115ea9190612342565b8988888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bda92505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055905080156116dd57600082815260cb602052604090205460ff161561167a5761167a612313565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26117ea565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016117ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016106c4565b5050505b50505050505050565b60fd54604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa158015610a37573d6000803e3d6000fd5b73ffffffffffffffffffffffffffffffffffffffff163b151590565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c429084906118e4908890839089906000908990600401612359565b6000604051808303818588803b1580156118fd57600080fd5b505af1158015611911573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff166119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016106c4565b60cc5473ffffffffffffffffffffffffffffffffffffffff16611a115760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000611a6685858585611bf4565b805190602001209050949350505050565b6000611a87878787878787611c8d565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff1633148015610a7d575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa158015611b36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5a91906123a6565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611bb6575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b606084848484604051602401611c0d94939291906123c3565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611caa9695949392919061240d565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611d4e57600080fd5b50565b60008083601f840112611d6357600080fd5b50813567ffffffffffffffff811115611d7b57600080fd5b602083019150836020828501011115611d9357600080fd5b9250929050565b803563ffffffff81168114611dae57600080fd5b919050565b60008060008060608587031215611dc957600080fd5b8435611dd481611d2c565b9350602085013567ffffffffffffffff811115611df057600080fd5b611dfc87828801611d51565b9094509250611e0f905060408601611d9a565b905092959194509250565b60005b83811015611e35578181015183820152602001611e1d565b83811115610edc5750506000910152565b60008151808452611e5e816020860160208601611e1a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ea36020830184611e46565b9392505050565b600060208284031215611ebc57600080fd5b5035919050565b600080600060408486031215611ed857600080fd5b833567ffffffffffffffff811115611eef57600080fd5b611efb86828701611d51565b9094509250611f0e905060208501611d9a565b90509250925092565b600080600060608486031215611f2c57600080fd5b8335611f3781611d2c565b92506020840135611f4781611d2c565b91506040840135611f5781611d2c565b809150509250925092565b600080600080600080600060c0888a031215611f7d57600080fd5b873596506020880135611f8f81611d2c565b95506040880135611f9f81611d2c565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611fc957600080fd5b611fd58a828b01611d51565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a083015261208360c083018486611fe8565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff861681526080602082015260006120c0608083018688611fe8565b905083604083015263ffffffff831660608301529695505050505050565b600080604083850312156120f157600080fd5b82516120fc81611d2c565b602084015190925060ff8116811461211357600080fd5b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561215f57600080fd5b815167ffffffffffffffff8082111561217757600080fd5b818401915084601f83011261218b57600080fd5b81518181111561219d5761219d61211e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156121e3576121e361211e565b816040528281528760208487010111156121fc57600080fd5b61220d836020830160208801611e1a565b979650505050505050565b60006020828403121561222a57600080fd5b81518015158114611ea357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156122905761229061223a565b02949350505050565b600067ffffffffffffffff808416806122db577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561230a5761230a61223a565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b6000828210156123545761235461223a565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061220d60a0830184611e46565b6000602082840312156123b857600080fd5b8151611ea381611d2c565b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250608060408301526123fc6080830185611e46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261245860c0830184611e46565b9897505050505050505056fea164736f6c634300080f000a"; + hex"60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant l2OutputOracleCode = hex"60806040526004361061018a5760003560e01c806389c44cbb116100d6578063ce5db8d61161007f578063dcec334811610059578063dcec33481461049b578063e1a41bcf146104b0578063f4daa291146104c657600080fd5b8063ce5db8d614610445578063cf8e5cf01461045b578063d1de856c1461047b57600080fd5b8063a25ae557116100b0578063a25ae55714610391578063a8e4fb90146103ed578063bffa7f0f1461041a57600080fd5b806389c44cbb1461034857806393991af3146103685780639aaab6481461037e57600080fd5b806369f16eec1161013857806370872aa51161011257806370872aa5146102fc5780637f00642014610312578063887862721461033257600080fd5b806369f16eec146102a75780636abcf563146102bc5780636b4d98dd146102d157600080fd5b8063529933df11610169578063529933df146101ea578063534db0e2146101ff57806354fd4d501461025157600080fd5b80622134cc1461018f5780631c89c97d146101b35780634599c788146101d5575b600080fd5b34801561019b57600080fd5b506005545b6040519081526020015b60405180910390f35b3480156101bf57600080fd5b506101d36101ce3660046113a2565b6104db565b005b3480156101e157600080fd5b506101a06108b6565b3480156101f657600080fd5b506004546101a0565b34801561020b57600080fd5b5060065461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101aa565b34801561025d57600080fd5b5061029a6040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516101aa9190611405565b3480156102b357600080fd5b506101a0610929565b3480156102c857600080fd5b506003546101a0565b3480156102dd57600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561030857600080fd5b506101a060015481565b34801561031e57600080fd5b506101a061032d366004611478565b61093b565b34801561033e57600080fd5b506101a060025481565b34801561035457600080fd5b506101d3610363366004611478565b610b4f565b34801561037457600080fd5b506101a060055481565b6101d361038c366004611491565b610de9565b34801561039d57600080fd5b506103b16103ac366004611478565b61124a565b60408051825181526020808401516fffffffffffffffffffffffffffffffff9081169183019190915292820151909216908201526060016101aa565b3480156103f957600080fd5b5060075461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561042657600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561045157600080fd5b506101a060085481565b34801561046757600080fd5b506103b1610476366004611478565b6112de565b34801561048757600080fd5b506101a0610496366004611478565b611316565b3480156104a757600080fd5b506101a0611346565b3480156104bc57600080fd5b506101a060045481565b3480156104d257600080fd5b506008546101a0565b600054610100900460ff16158080156104fb5750600054600160ff909116105b806105155750303b158015610515575060005460ff166001145b6105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561060457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60008811610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e2030000000000000606482015260840161059d565b60008711610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e2030000000000000000000000000606482015260840161059d565b428511156107db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60048890556005879055600186905560028590556007805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556006805492861692909116919091179055600882905580156108ac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6003546000901561092057600380546108d1906001906114f2565b815481106108e1576108e1611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b600354600090610924906001906114f2565b60006109456108b6565b8211156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a40161059d565b600354610aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161059d565b6003546000905b80821015610b485760006002610acc8385611538565b610ad69190611550565b90508460038281548110610aec57610aec611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610b3e57610b37816001611538565b9250610b42565b8091505b50610ab6565b5092915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610bf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161059d565b6003548110610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60085460038281548110610cc357610cc3611509565b6000918252602090912060016002909202010154610cf3906fffffffffffffffffffffffffffffffff16426114f2565b10610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161059d565b6000610db160035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b610ebe611346565b8314610f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161059d565b42610f7c84611316565b10611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161059d565b83611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161059d565b81156111525781814014611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161059d565b8261115c60035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e24260405161118e91815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b60408051606081018252600080825260208201819052918101919091526003828154811061127a5761127a611509565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b604080516060810182526000808252602082018190529181019190915260036113068361093b565b8154811061127a5761127a611509565b60006005546001548361132991906114f2565b611333919061158b565b6002546113409190611538565b92915050565b60006004546113536108b6565b6109249190611538565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b803573ffffffffffffffffffffffffffffffffffffffff8116811461139d57600080fd5b919050565b600080600080600080600060e0888a0312156113bd57600080fd5b873596506020880135955060408801359450606088013593506113e260808901611379565b92506113f060a08901611379565b915060c0880135905092959891949750929550565b600060208083528351808285015260005b8181101561143257858101830151858201604001528201611416565b81811115611444576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561148a57600080fd5b5035919050565b600080600080608085870312156114a757600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611504576115046114c3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561154b5761154b6114c3565b500190565b600082611586577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156115c3576115c36114c3565b50029056fea164736f6c634300080f000a"; bytes internal constant systemConfigCode = hex"608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a"; bytes internal constant l1StandardBridgeCode = - hex"6080604052600436106101b05760003560e01c80635c975abb116100ec5780639a2ac6d51161008a578063c0c53b8b11610064578063c0c53b8b146105c2578063c89701a2146105e2578063d84447151461060f578063e11013dd1461062457600080fd5b80639a2ac6d51461057c578063a9f9e6751461058f578063b1a1a882146105af57600080fd5b806387087623116100c657806387087623146104eb5780638f601f661461050b57806391c49bf8146104a0578063927ede2d1461055157600080fd5b80635c975abb1461048b5780637f46ddb2146104a0578063838b2520146104cb57600080fd5b806335e80ab311610159578063540abf7311610133578063540abf73146103e057806354fd4d5014610400578063550fcdc91461045657806358a997f61461046b57600080fd5b806335e80ab3146103435780633cb747bf146103705780634397dfef1461039d57600080fd5b80631635f5fd1161018a5780631635f5fd146102b457806321326849146102c757806333d7e2bd146102f157600080fd5b80630166a07a1461026e57806309fc88431461028e5780631532ec34146102a157600080fd5b3661026957333b15610249576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b610267333362030d4060405180602001604052806000815250610653565b005b600080fd5b34801561027a57600080fd5b50610267610289366004612ad9565b610666565b61026761029c366004612b8a565b610a80565b6102676102af366004612bdd565b610b57565b6102676102c2366004612bdd565b610b6b565b3480156102d357600080fd5b506102dc6110c9565b60405190151581526020015b60405180910390f35b3480156102fd57600080fd5b5060335461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e8565b34801561034f57600080fd5b5060325461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037c57600080fd5b5060035461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103a957600080fd5b506103b2611108565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102e8565b3480156103ec57600080fd5b506102676103fb366004612c50565b6111a5565b34801561040c57600080fd5b506104496040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e89190612d3d565b34801561046257600080fd5b506104496111ea565b34801561047757600080fd5b50610267610486366004612d50565b6112a5565b34801561049757600080fd5b506102dc611379565b3480156104ac57600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff1661031e565b3480156104d757600080fd5b506102676104e6366004612c50565b61140d565b3480156104f757600080fd5b50610267610506366004612d50565b611452565b34801561051757600080fd5b50610543610526366004612dd3565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e8565b34801561055d57600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff1661031e565b61026761058a366004612e0c565b611526565b34801561059b57600080fd5b506102676105aa366004612ad9565b611568565b6102676105bd366004612b8a565b611577565b3480156105ce57600080fd5b506102676105dd366004612e6f565b611648565b3480156105ee57600080fd5b5060045461031e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561061b57600080fd5b50610449611847565b610267610632366004612e0c565b6118b7565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61066084843485856118fa565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610739575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa1580156106fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107219190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b6107eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b6107f3611379565b1561085a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b61086387611b59565b156109b1576108728787611bbb565b610924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050610a33565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a16835292905220546109ef908490612f06565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610a33908585611cdb565b610a77878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611daf92505050565b50505050505050565b333b15610b0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b523333348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b505050565b610b648585858585610b6b565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610c3e575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610c02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c269190612eba565b73ffffffffffffffffffffffffffffffffffffffff16145b610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610240565b610cf8611379565b15610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610240565b610d676110c9565b15610df4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414610e83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610240565b3073ffffffffffffffffffffffffffffffffffffffff851603610f28576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610240565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610fd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610240565b61101585858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e3d92505050565b6000611032855a8660405180602001604052806000815250611eb0565b9050806110c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610240565b505050505050565b6000806110d4611108565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119c9190612f1d565b90939092509050565b610a7787873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b603354604080517f550fcdc9000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163550fcdc99160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112a09190810190612f81565b905090565b333b15611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a09190613041565b610a7787873388888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506121f592505050565b333b156114e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b6110c186863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611eca92505050565b61066033858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b610a7787878787878787610666565b333b15611606576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610240565b610b5233338585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061065392505050565b600054610100900460ff16158080156116685750600054600160ff909116105b806116825750303b158015611682575060005460ff166001145b61170e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610240565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561176c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560338054928516929091169190911790556117df84734200000000000000000000000000000000000010612204565b801561066057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b603354604080517fd8444715000000000000000000000000000000000000000000000000000000008152905160609273ffffffffffffffffffffffffffffffffffffffff169163d84447159160048083019260009291908290030181865afa15801561125a573d6000803e3d6000fd5b6106603385348686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118fa92505050565b6119026110c9565b1561198f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610240565b823414611a1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610240565b611a2a858585846122ee565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd0000000000000000000000000000000000000000000000000000000090611a8d908b908b9086908a90602401613063565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b9092168252611b20929188906004016130ac565b6000604051808303818588803b158015611b3957600080fd5b505af1158015611b4d573d6000803e3d6000fd5b50505050505050505050565b6000611b85827f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b80611bb55750611bb5827fec4fc8e300000000000000000000000000000000000000000000000000000000612361565b92915050565b6000611be7837f1d1d8b6300000000000000000000000000000000000000000000000000000000612361565b15611c90578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5b9190612eba565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611bb5565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c37573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610b529084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612384565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611e27939291906130f1565b60405180910390a46110c1868686868686612490565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611e9c92919061312f565b60405180910390a361066084848484612518565b600080600080845160208601878a8af19695505050505050565b611ed387611b59565b1561202157611ee28787611bbb565b611f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610240565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b15801561200457600080fd5b505af1158015612018573d6000803e3d6000fd5b505050506120b5565b61204373ffffffffffffffffffffffffffffffffffffffff8816863086612585565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054612081908490613148565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b6120c38787878787866125e3565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090612127908b908d908c908c908c908b90602401613160565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b90921682526121ba929187906004016130ac565b600060405180830381600087803b1580156121d457600080fd5b505af11580156121e8573d6000803e3d6000fd5b5050505050505050505050565b610a7787878787878787611eca565b600054610100900460ff1661229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610240565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161234d92919061312f565b60405180910390a361066084848484612671565b600061236c836126d0565b801561237d575061237d8383612734565b9392505050565b60006123e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128039092919063ffffffff16565b805190915015610b5257808060200190518101906124049190613041565b610b52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610240565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd868686604051612508939291906130f1565b60405180910390a4505050505050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d848460405161257792919061312f565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526106609085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611d2d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161265b939291906130f1565b60405180910390a46110c186868686868661281a565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af5848460405161257792919061312f565b60006126fc827f01ffc9a700000000000000000000000000000000000000000000000000000000612734565b8015611bb5575061272d827fffffffff00000000000000000000000000000000000000000000000000000000612734565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156127ec575060208210155b80156127f85750600081115b979650505050505050565b60606128128484600085612892565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf868686604051612508939291906130f1565b606082471015612924576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610240565b73ffffffffffffffffffffffffffffffffffffffff85163b6129a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610240565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516129cb91906131bb565b60006040518083038185875af1925050503d8060008114612a08576040519150601f19603f3d011682016040523d82523d6000602084013e612a0d565b606091505b50915091506127f882828660608315612a2757508161237d565b825115612a375782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102409190612d3d565b73ffffffffffffffffffffffffffffffffffffffff81168114612a8d57600080fd5b50565b60008083601f840112612aa257600080fd5b50813567ffffffffffffffff811115612aba57600080fd5b602083019150836020828501011115612ad257600080fd5b9250929050565b600080600080600080600060c0888a031215612af457600080fd5b8735612aff81612a6b565b96506020880135612b0f81612a6b565b95506040880135612b1f81612a6b565b94506060880135612b2f81612a6b565b93506080880135925060a088013567ffffffffffffffff811115612b5257600080fd5b612b5e8a828b01612a90565b989b979a50959850939692959293505050565b803563ffffffff81168114612b8557600080fd5b919050565b600080600060408486031215612b9f57600080fd5b612ba884612b71565b9250602084013567ffffffffffffffff811115612bc457600080fd5b612bd086828701612a90565b9497909650939450505050565b600080600080600060808688031215612bf557600080fd5b8535612c0081612a6b565b94506020860135612c1081612a6b565b935060408601359250606086013567ffffffffffffffff811115612c3357600080fd5b612c3f88828901612a90565b969995985093965092949392505050565b600080600080600080600060c0888a031215612c6b57600080fd5b8735612c7681612a6b565b96506020880135612c8681612a6b565b95506040880135612c9681612a6b565b945060608801359350612cab60808901612b71565b925060a088013567ffffffffffffffff811115612b5257600080fd5b60005b83811015612ce2578181015183820152602001612cca565b838111156106605750506000910152565b60008151808452612d0b816020860160208601612cc7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061237d6020830184612cf3565b60008060008060008060a08789031215612d6957600080fd5b8635612d7481612a6b565b95506020870135612d8481612a6b565b945060408701359350612d9960608801612b71565b9250608087013567ffffffffffffffff811115612db557600080fd5b612dc189828a01612a90565b979a9699509497509295939492505050565b60008060408385031215612de657600080fd5b8235612df181612a6b565b91506020830135612e0181612a6b565b809150509250929050565b60008060008060608587031215612e2257600080fd5b8435612e2d81612a6b565b9350612e3b60208601612b71565b9250604085013567ffffffffffffffff811115612e5757600080fd5b612e6387828801612a90565b95989497509550505050565b600080600060608486031215612e8457600080fd5b8335612e8f81612a6b565b92506020840135612e9f81612a6b565b91506040840135612eaf81612a6b565b809150509250925092565b600060208284031215612ecc57600080fd5b815161237d81612a6b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612f1857612f18612ed7565b500390565b60008060408385031215612f3057600080fd5b8251612f3b81612a6b565b602084015190925060ff81168114612e0157600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060208284031215612f9357600080fd5b815167ffffffffffffffff80821115612fab57600080fd5b818401915084601f830112612fbf57600080fd5b815181811115612fd157612fd1612f52565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561301757613017612f52565b8160405282815287602084870101111561303057600080fd5b6127f8836020830160208801612cc7565b60006020828403121561305357600080fd5b8151801515811461237d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff8087168352808616602084015250836040830152608060608301526130a26080830184612cf3565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006130db6060830185612cf3565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006131266060830184612cf3565b95945050505050565b8281526040602082015260006128126040830184612cf3565b6000821982111561315b5761315b612ed7565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a08301526131af60c0830184612cf3565b98975050505050505050565b600082516131cd818460208701612cc7565b919091019291505056fea164736f6c634300080f000a"; + hex"6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a"; bytes internal constant l1ERC721BridgeCode = hex"608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a"; } diff --git a/packages/contracts-bedrock/test/universal/StandardBridge.t.sol b/packages/contracts-bedrock/test/universal/StandardBridge.t.sol index 3e1e3c1efbd..e2f62b32b84 100644 --- a/packages/contracts-bedrock/test/universal/StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/universal/StandardBridge.t.sol @@ -21,18 +21,10 @@ contract StandardBridgeTester is StandardBridge { return _isCorrectTokenPair(_mintableToken, _otherToken); } - function gasPayingToken() public pure override returns (address, uint8) { + function gasPayingToken() internal pure override returns (address, uint8) { return (Constants.ETHER, 18); } - function gasPayingTokenName() public pure override returns (string memory) { - return "Ether"; - } - - function gasPayingTokenSymbol() public pure override returns (string memory) { - return "ETH"; - } - receive() external payable override { } } From 389684e72fb2e19450854d65601b35ae1794ad8a Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 23 Apr 2024 16:16:44 -0600 Subject: [PATCH 20/45] contracts-bedrock: semver lock --- packages/contracts-bedrock/semver-lock.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 47d2080328b..89e3ce4314c 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,16 +16,16 @@ "sourceCodeHash": "0xc59b8574531162e016d7342aeb6e79d05574e90dbea6c0e5ede35b65010ad894" }, "src/L1/L1CrossDomainMessenger.sol": { - "initCodeHash": "0x5c85913a45901e45998af2409d3636d9a96cd0a9d012dfca8ddf56b425b95a42", - "sourceCodeHash": "0x52e8993798b3a9c9022c31beec90a8f133cc19369330170bc2a45c690c857bc5" + "initCodeHash": "0xedf049d217216814c682ceeea83cd927210cc4baeba9ef0a3d5c574f0976d877", + "sourceCodeHash": "0x9ba02de96bc5cb51e85c624d58d0eb331d5dee8b94e01c24bcc94ac0692c538e" }, "src/L1/L1ERC721Bridge.sol": { "initCodeHash": "0xec73b46e68ea29298707f7b9709e7948afe303907b6c4e8b161e2ded2c85ee9c", "sourceCodeHash": "0xd57acdbd001941e75cf4326ba7c1bdad809912f10b1e44ffaebe073917cdd296" }, "src/L1/L1StandardBridge.sol": { - "initCodeHash": "0x0036830ffeea9d74cc106bc9354d69db730e97b8cfcae5ae8cc64ba42b7aed27", - "sourceCodeHash": "0xb6e0f79eaf164e0993be78a4f9b4499112dd7cd452f1ccee9340f3030e322310" + "initCodeHash": "0xd34d706a9ea16a31728e32b36cb7a2316d30fe0bcaa04e6ebad4cfc53ac4e86d", + "sourceCodeHash": "0xd12449d181369d719a56694188f74be45df2d6d32847f02ca17603f73068dac1" }, "src/L1/L2OutputOracle.sol": { "initCodeHash": "0x14c3a582ca46ef2a6abad5590323f4de26ff4de54415c927c62e131ccbf8d9ba", @@ -76,16 +76,16 @@ "sourceCodeHash": "0x3a94f273937d8908fb37dd2c495a6a0b9c3941fe68ccea51723f84eb343ba225" }, "src/L2/L2CrossDomainMessenger.sol": { - "initCodeHash": "0x6fca9d0d1c87fea38db1c2d266bb5acd4a7a014abaaa5ff95e31bb5589ef42f3", - "sourceCodeHash": "0xd829462f5e35db4e593334bdc53941293213b3fad8d399ed8b20bc031fd3aab8" + "initCodeHash": "0x55172a028a65e930e4486bb1a881bb2bc9f29fc1c8faa329f3b6c79a19c241fe", + "sourceCodeHash": "0x3a522442ba91ab50e518dd1f1df55b3e7d3039ef6d995a37ac69665e5c188aa3" }, "src/L2/L2ERC721Bridge.sol": { "initCodeHash": "0xcafa012b2d8f1bb05c11cbbff9749c0fe6f995c9afb1d26d2d71f03384e34a22", "sourceCodeHash": "0xa7646a588275046f92525ef121e5a0fe149e7752ea51fe62f7e0686a21153542" }, "src/L2/L2StandardBridge.sol": { - "initCodeHash": "0x73f9c70c264947f6d963b8be6901f84cc4fb1b191e0fed6836d401df556ef145", - "sourceCodeHash": "0x78b0cbd013d8547be1a1741ed5b5a0462c3b5fa67f978b962843d990cd74e1be" + "initCodeHash": "0xf4b43f49bb9c97c654ab0d0a2ab51a4927f3ecaadf595c986da9f92dfb4ad7e8", + "sourceCodeHash": "0x90c0cd9e33bd00a68f19b354498af0342c72409ed410daa9268828b368a15eb2" }, "src/L2/L2ToL1MessagePasser.sol": { "initCodeHash": "0x08bbede75cd6dfd076903b8f04d24f82fa7881576c135825098778632e37eebc", From 23d5e0a8940c998b67e6d472404e60f40b7043e1 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 23 Apr 2024 16:36:37 -0600 Subject: [PATCH 21/45] invariant-docs: fixup --- .../contracts-bedrock/invariant-docs/CrossDomainMessenger.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/contracts-bedrock/invariant-docs/CrossDomainMessenger.md b/packages/contracts-bedrock/invariant-docs/CrossDomainMessenger.md index 1f63feb32c9..4329859f24a 100644 --- a/packages/contracts-bedrock/invariant-docs/CrossDomainMessenger.md +++ b/packages/contracts-bedrock/invariant-docs/CrossDomainMessenger.md @@ -1,14 +1,14 @@ # `CrossDomainMessenger` Invariants ## A call to `relayMessage` should succeed if at least the minimum gas limit can be supplied to the target context, there is enough gas to complete execution of `relayMessage` after the target context's execution is finished, and the target context did not revert. -**Test:** [`CrossDomainMessenger.t.sol#L145`](../test/invariants/CrossDomainMessenger.t.sol#L145) +**Test:** [`CrossDomainMessenger.t.sol#L143`](../test/invariants/CrossDomainMessenger.t.sol#L143) There are two minimum gas limits here: - The outer min gas limit is for the call from the `OptimismPortal` to the `L1CrossDomainMessenger`, and it can be retrieved by calling the xdm's `baseGas` function with the `message` and inner limit. - The inner min gas limit is for the call from the `L1CrossDomainMessenger` to the target contract. ## A call to `relayMessage` should assign the message hash to the `failedMessages` mapping if not enough gas is supplied to forward `minGasLimit` to the target context or if there is not enough gas to complete execution of `relayMessage` after the target context's execution is finished. -**Test:** [`CrossDomainMessenger.t.sol#L178`](../test/invariants/CrossDomainMessenger.t.sol#L178) +**Test:** [`CrossDomainMessenger.t.sol#L176`](../test/invariants/CrossDomainMessenger.t.sol#L176) There are two minimum gas limits here: - The outer min gas limit is for the call from the `OptimismPortal` to the `L1CrossDomainMessenger`, and it can be retrieved by calling the xdm's `baseGas` function with the `message` and inner limit. From 2ffc48e8c47b1403b091cf82aa1c687bb2d29da8 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 23 Apr 2024 17:36:51 -0600 Subject: [PATCH 22/45] storage-layout: address --- op-bindings/bindings/optimismportal.go | 2 +- op-bindings/bindings/systemconfig.go | 2 +- .../bindingspreview/optimismportal2_more.go | 27 ++++ packages/contracts-bedrock/semver-lock.json | 4 +- .../snapshots/state-diff/Kontrol-Deploy.json | 118 +++++++++--------- .../storageLayout/OptimismPortal.json | 37 +++++- .../src/L1/OptimismPortal.sol | 24 +++- .../proofs/utils/DeploymentSummary.sol | 4 +- .../proofs/utils/DeploymentSummaryCode.sol | 2 +- 9 files changed, 151 insertions(+), 69 deletions(-) create mode 100644 op-bindings/bindingspreview/optimismportal2_more.go diff --git a/op-bindings/bindings/optimismportal.go b/op-bindings/bindings/optimismportal.go index 743838c91bd..3fb3ed0cd59 100644 --- a/op-bindings/bindings/optimismportal.go +++ b/op-bindings/bindings/optimismportal.go @@ -49,7 +49,7 @@ type TypesWithdrawalTransaction struct { // OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract. var OptimismPortalMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"balance\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositERC20Transaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_mint\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_l2Oracle\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isOutputFinalized\",\"inputs\":[{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Oracle\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractL2OutputOracle\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"paused_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_l2OutputIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provenWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"outputRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"timestamp\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"l2OutputIndex\",\"type\":\"uint128\",\"internalType\":\"uint128\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setGasPayingToken\",\"inputs\":[{\"name\":\"_token\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_decimals\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_name\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_symbol\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LargeCalldata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoValue\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonReentrant\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyCustomGasToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SmallGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TransferFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[]}]", - Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + Bin: "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e372e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c52578560600151603d6000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b5050603d5490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", } // OptimismPortalABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindings/systemconfig.go b/op-bindings/bindings/systemconfig.go index 56d8e4ba303..b1b11875681 100644 --- a/op-bindings/bindings/systemconfig.go +++ b/op-bindings/bindings/systemconfig.go @@ -52,7 +52,7 @@ type SystemConfigAddresses struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_OUTPUT_ORACLE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2OutputOracle\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasPayingToken\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2OutputOracle\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setResourceConfig\",\"inputs\":[{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", - Bin: "0x60806040523480156200001157600080fd5b50620000496200003260016000805160206200398783398151915262001141565b60001b600019620000d160201b62000f441760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b6200136a565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000f481760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000f441760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001141565b60001b84620000d160201b62000f441760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001141565b60001b8360000151620000d160201b62000f441760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001141565b60001b8360200151620000d160201b62000f441760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001141565b60001b8360400151620000d160201b62000f441760201c565b6200038f6200037660017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181662001141565b60001b8360600151620000d160201b62000f441760201c565b620003c8620003af60016000805160206200396783398151915262001141565b60001b8360800151620000d160201b62000f441760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001141565b60001b8360a00151620000d160201b62000f441760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a29565b6200044162000d6d565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d9a565b565b6200056762000e01565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e5d565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062003927833981519152836040516200062291906200118a565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062003927833981519152836040516200068591906200118a565b60405180910390a3505050565b6200069c62000d6d565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200398783398151915262001141565b60001b62000eaf60201b620006d71760201c565b6000036200055b576200055b6200078b60016000805160206200398783398151915262001141565b60001b43620000d160201b62000f441760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015620007ea5750620007e862000eb3565b155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085a9190620011bf565b60ff1614620008c35760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b600062000943826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000932919081019062001201565b62000ee760201b62000f641760201c565b905060006200098a836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b9050620009a6836012848462000f7f60201b620010071760201c565b620009b06200105b565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801562000a0b57600080fd5b505af115801562000a20573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000ab85760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b295760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b4b9190620012b9565b63ffffffff16111562000b905760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b6000816020015160ff161162000c015760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c23908290620012e4565b62000c2f919062001316565b63ffffffff161462000caa5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d959063ffffffff6a010000000000000000000082048116911662001345565b905090565b600054610100900460ff1662000df65760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e5d565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b60008062000ec06200107d565b506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b600060208251111562000f635760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f79826200109e60201b620010d91760201c565b92915050565b62000fc962000f9f6001600080516020620038e783398151915262001141565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000f441760201c565b6200100f62000ffa60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001141565b60001b83620000d160201b62000f441760201c565b620010556200104060017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001141565b60001b82620000d160201b62000f441760201c565b50505050565b600062000d956200074f60016000805160206200396783398151915262001141565b60008062001095620010c860201b620011021760201c565b90939092509050565b805160218110620010b75763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60008080620010ec6200074f6001600080516020620038e783398151915262001141565b6001600160a01b03811693509050826200111f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b634e487b7160e01b600052601160045260246000fd5b6000828210156200115657620011566200112b565b500390565b60005b83811015620011785781810151838201526020016200115e565b83811115620010555750506000910152565b6020815260008251806020840152620011ab8160408501602087016200115b565b601f01601f19169190910160400192915050565b600060208284031215620011d257600080fd5b815160ff81168114620011e457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200121457600080fd5b81516001600160401b03808211156200122c57600080fd5b818401915084601f8301126200124157600080fd5b815181811115620012565762001256620011eb565b604051601f8201601f19908116603f01168101908382118183101715620012815762001281620011eb565b816040528281528760208487010111156200129b57600080fd5b620012ae8360208301602088016200115b565b979650505050505050565b600063ffffffff808316818516808303821115620012db57620012db6200112b565b01949350505050565b600063ffffffff808416806200130a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156200133c576200133c6200112b565b02949350505050565b60006001600160401b03828116848216808303821115620012db57620012db6200112b565b61256d806200137a6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80638da5cb5b1161017b578063d8444715116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e0e2016d116100bd578063e0e2016d14610620578063e81b2c6d14610628578063f2fde38b1461063157600080fd5b8063d844471514610610578063dac6e63a1461061857600080fd5b8063bc49ce5f1161012f578063c71973f611610114578063c71973f6146104b6578063c9b26f61146104c9578063cc731b02146104dc57600080fd5b8063bc49ce5f146104a6578063c4e8ddfa146104ae57600080fd5b80639b7d7f0a116101605780639b7d7f0a14610483578063a71198691461048b578063b40a817c1461049357600080fd5b80638da5cb5b14610452578063935f029e1461047057600080fd5b806348cd4cb11161022957806354fd4d50116101dd5780635d73369c116101c25780635d73369c1461043a57806361d1576814610442578063715018a61461044a57600080fd5b806354fd4d50146103e9578063550fcdc91461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634d9f1559146103ba5780634f16540b146103c257600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102d5610c2d565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6104256040518060400160405280601c81526020017f312e31322e302d626574612b637573746f6d2d6761732d746f6b656e0000000081525081565b6040516102c491906122ec565b610425610c5d565b6102ba610c67565b6102ba610c92565b61031e610cbd565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61047e3660046122ff565b610cd1565b6102d5610ce7565b6102d5610d17565b61031e6104a1366004612321565b610d47565b6102ba610d58565b6102d5610d83565b61031e6104c436600461233c565b610db3565b61031e6104d7366004612358565b610dc4565b6105a06040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b610425610dd5565b6102d5610ddf565b6102ba610e0f565b6102ba60675481565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a68718166123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60006106db6106d760017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a68718166123a0565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b6106a460017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a68718166123a0565b610cc561117f565b610ccf6000611d9a565b565b610cd961117f565b610ce38282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610d4f61117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610dbb61117f565b61072181611865565b610dcc61117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610ccf611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610ccf57610ccf61155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610ccf33611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", + Bin: "0x60806040523480156200001157600080fd5b50620000496200003260016000805160206200398783398151915262001141565b60001b600019620000d160201b62000f441760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b6200136a565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000f481760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000f441760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001141565b60001b84620000d160201b62000f441760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001141565b60001b8360000151620000d160201b62000f441760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001141565b60001b8360200151620000d160201b62000f441760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001141565b60001b8360400151620000d160201b62000f441760201c565b6200038f6200037660017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a687181662001141565b60001b8360600151620000d160201b62000f441760201c565b620003c8620003af60016000805160206200396783398151915262001141565b60001b8360800151620000d160201b62000f441760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001141565b60001b8360a00151620000d160201b62000f441760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a29565b6200044162000d6d565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d9a565b565b6200056762000e01565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e5d565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062003927833981519152836040516200062291906200118a565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062003927833981519152836040516200068591906200118a565b60405180910390a3505050565b6200069c62000d6d565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200398783398151915262001141565b60001b62000eaf60201b620006d71760201c565b6000036200055b576200055b6200078b60016000805160206200398783398151915262001141565b60001b43620000d160201b62000f441760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015620007ea5750620007e862000eb3565b155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085a9190620011bf565b60ff1614620008c35760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b600062000943826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000932919081019062001201565b62000ee760201b62000f641760201c565b905060006200098a836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b9050620009a6836012848462000f7f60201b620010071760201c565b620009b06200105b565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801562000a0b57600080fd5b505af115801562000a20573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000ab85760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b295760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b4b9190620012b9565b63ffffffff16111562000b905760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b6000816020015160ff161162000c015760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c23908290620012e4565b62000c2f919062001316565b63ffffffff161462000caa5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d959063ffffffff6a010000000000000000000082048116911662001345565b905090565b600054610100900460ff1662000df65760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e5d565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b60008062000ec06200107d565b506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b600060208251111562000f635760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f79826200109e60201b620010d91760201c565b92915050565b62000fc962000f9f6001600080516020620038e783398151915262001141565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000f441760201c565b6200100f62000ffa60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001141565b60001b83620000d160201b62000f441760201c565b620010556200104060017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001141565b60001b82620000d160201b62000f441760201c565b50505050565b600062000d956200074f60016000805160206200396783398151915262001141565b60008062001095620010c860201b620011021760201c565b90939092509050565b805160218110620010b75763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60008080620010ec6200074f6001600080516020620038e783398151915262001141565b6001600160a01b03811693509050826200111f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b634e487b7160e01b600052601160045260246000fd5b6000828210156200115657620011566200112b565b500390565b60005b83811015620011785781810151838201526020016200115e565b83811115620010555750506000910152565b6020815260008251806020840152620011ab8160408501602087016200115b565b601f01601f19169190910160400192915050565b600060208284031215620011d257600080fd5b815160ff81168114620011e457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200121457600080fd5b81516001600160401b03808211156200122c57600080fd5b818401915084601f8301126200124157600080fd5b815181811115620012565762001256620011eb565b604051601f8201601f19908116603f01168101908382118183101715620012815762001281620011eb565b816040528281528760208487010111156200129b57600080fd5b620012ae8360208301602088016200115b565b979650505050505050565b600063ffffffff808316818516808303821115620012db57620012db6200112b565b01949350505050565b600063ffffffff808416806200130a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156200133c576200133c6200112b565b02949350505050565b60006001600160401b03828116848216808303821115620012db57620012db6200112b565b61256d806200137a6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80638da5cb5b1161017b578063d8444715116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e0e2016d116100bd578063e0e2016d14610620578063e81b2c6d14610628578063f2fde38b1461063157600080fd5b8063d844471514610610578063dac6e63a1461061857600080fd5b8063bc49ce5f1161012f578063c71973f611610114578063c71973f6146104b6578063c9b26f61146104c9578063cc731b02146104dc57600080fd5b8063bc49ce5f146104a6578063c4e8ddfa146104ae57600080fd5b80639b7d7f0a116101605780639b7d7f0a14610483578063a71198691461048b578063b40a817c1461049357600080fd5b80638da5cb5b14610452578063935f029e1461047057600080fd5b806348cd4cb11161022957806354fd4d50116101dd5780635d73369c116101c25780635d73369c1461043a57806361d1576814610442578063715018a61461044a57600080fd5b806354fd4d50146103e9578063550fcdc91461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634d9f1559146103ba5780634f16540b146103c257600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102d5610c2d565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b6104256040518060400160405280601c81526020017f312e31332e302d626574612b637573746f6d2d6761732d746f6b656e0000000081525081565b6040516102c491906122ec565b610425610c5d565b6102ba610c67565b6102ba610c92565b61031e610cbd565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61047e3660046122ff565b610cd1565b6102d5610ce7565b6102d5610d17565b61031e6104a1366004612321565b610d47565b6102ba610d58565b6102d5610d83565b61031e6104c436600461233c565b610db3565b61031e6104d7366004612358565b610dc4565b6105a06040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b610425610dd5565b6102d5610ddf565b6102ba610e0f565b6102ba60675481565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a68718166123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60006106db6106d760017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a68718166123a0565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b6106a460017fe52a667f71ec761b9b381c7b76ca9b852adf7e8905da0e0ad49986a0a68718166123a0565b610cc561117f565b610ccf6000611d9a565b565b610cd961117f565b610ce38282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610d4f61117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610dbb61117f565b61072181611865565b610dcc61117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610ccf611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610ccf57610ccf61155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610ccf33611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", } // SystemConfigABI is the input ABI used to generate the binding from. diff --git a/op-bindings/bindingspreview/optimismportal2_more.go b/op-bindings/bindingspreview/optimismportal2_more.go new file mode 100644 index 00000000000..52b703e7f3c --- /dev/null +++ b/op-bindings/bindingspreview/optimismportal2_more.go @@ -0,0 +1,27 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindingspreview + +import ( + "encoding/json" + + "github.com/ethereum-optimism/optimism/op-bindings/solc" +) + +const OptimismPortal2StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"params\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_struct(ResourceParams)1023_storage\"},{\"astId\":1003,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_array(t_uint256)48_storage\"},{\"astId\":1004,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"l2Sender\",\"offset\":0,\"slot\":\"50\",\"type\":\"t_address\"},{\"astId\":1005,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"finalizedWithdrawals\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1006,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"spacer_52_0_32\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_bytes32\"},{\"astId\":1007,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"spacer_53_0_1\",\"offset\":0,\"slot\":\"53\",\"type\":\"t_bool\"},{\"astId\":1008,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"superchainConfig\",\"offset\":1,\"slot\":\"53\",\"type\":\"t_contract(SuperchainConfig)1020\"},{\"astId\":1009,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"spacer_54_0_20\",\"offset\":0,\"slot\":\"54\",\"type\":\"t_address\"},{\"astId\":1010,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"systemConfig\",\"offset\":0,\"slot\":\"55\",\"type\":\"t_contract(SystemConfig)1021\"},{\"astId\":1011,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"disputeGameFactory\",\"offset\":0,\"slot\":\"56\",\"type\":\"t_contract(DisputeGameFactory)1018\"},{\"astId\":1012,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"provenWithdrawals\",\"offset\":0,\"slot\":\"57\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_address,t_struct(ProvenWithdrawal)1022_storage))\"},{\"astId\":1013,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"disputeGameBlacklist\",\"offset\":0,\"slot\":\"58\",\"type\":\"t_mapping(t_contract(IDisputeGame)1019,t_bool)\"},{\"astId\":1014,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"respectedGameType\",\"offset\":0,\"slot\":\"59\",\"type\":\"t_userDefinedValueType(GameType)1024\"},{\"astId\":1015,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"respectedGameTypeUpdatedAt\",\"offset\":4,\"slot\":\"59\",\"type\":\"t_uint64\"},{\"astId\":1016,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"proofSubmitters\",\"offset\":0,\"slot\":\"60\",\"type\":\"t_mapping(t_bytes32,t_array(t_address)dyn_storage)\"},{\"astId\":1017,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"spacer_61_0_32\",\"offset\":0,\"slot\":\"61\",\"type\":\"t_bytes32\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_address)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"address[]\",\"numberOfBytes\":\"32\",\"base\":\"t_address\"},\"t_array(t_uint256)48_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_contract(DisputeGameFactory)1018\":{\"encoding\":\"inplace\",\"label\":\"contract DisputeGameFactory\",\"numberOfBytes\":\"20\"},\"t_contract(IDisputeGame)1019\":{\"encoding\":\"inplace\",\"label\":\"contract IDisputeGame\",\"numberOfBytes\":\"20\"},\"t_contract(SuperchainConfig)1020\":{\"encoding\":\"inplace\",\"label\":\"contract SuperchainConfig\",\"numberOfBytes\":\"20\"},\"t_contract(SystemConfig)1021\":{\"encoding\":\"inplace\",\"label\":\"contract SystemConfig\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_struct(ProvenWithdrawal)1022_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct OptimismPortal2.ProvenWithdrawal)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_struct(ProvenWithdrawal)1022_storage\"},\"t_mapping(t_bytes32,t_array(t_address)dyn_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e address[])\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_array(t_address)dyn_storage\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_bytes32,t_mapping(t_address,t_struct(ProvenWithdrawal)1022_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(address =\u003e struct OptimismPortal2.ProvenWithdrawal))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_address,t_struct(ProvenWithdrawal)1022_storage)\"},\"t_mapping(t_contract(IDisputeGame)1019,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(contract IDisputeGame =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_contract(IDisputeGame)1019\",\"value\":\"t_bool\"},\"t_struct(ProvenWithdrawal)1022_storage\":{\"encoding\":\"inplace\",\"label\":\"struct OptimismPortal2.ProvenWithdrawal\",\"numberOfBytes\":\"32\"},\"t_struct(ResourceParams)1023_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ResourceMetering.ResourceParams\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"},\"t_userDefinedValueType(GameType)1024\":{\"encoding\":\"inplace\",\"label\":\"GameType\",\"numberOfBytes\":\"4\"}}}" + +var OptimismPortal2StorageLayout = new(solc.StorageLayout) + +var OptimismPortal2DeployedBin = "0x6080604052600436106101b05760003560e01c80637fc48504116100ec578063a35d99df1161008a578063bf653a5c11610064578063bf653a5c1461062b578063cff0ab961461065e578063e9e05c42146106ff578063f2b4e6171461071257600080fd5b8063a35d99df14610544578063a3860f4814610564578063bb2c727e1461058457600080fd5b80638e819e54116100c65780638e819e5414610494578063952b2797146104b45780639bf62d82146104e7578063a14238e71461051457600080fd5b80637fc48504146104545780638b4c40b0146101d55780638c3152e91461047457600080fd5b80634870496f1161015957806354fd4d501161013357806354fd4d50146103a95780635c975abb146103ff57806371c1566e146104145780637d6be8dc1461043457600080fd5b80634870496f1461030c5780634fd0434c1461032c578063513747ab1461036e57600080fd5b806343ca1c501161018a57806343ca1c5014610297578063452a9320146102b757806345884d32146102cc57600080fd5b806333d7e2bd146101dc57806335e80ab3146102335780633c9f397c1461026557600080fd5b366101d7576101d53334620186a060006040518060200160405280600081525061073f565b005b600080fd5b3480156101e857600080fd5b506037546102099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023f57600080fd5b5060355461020990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561027157600080fd5b50603b546102829063ffffffff1681565b60405163ffffffff909116815260200161022a565b3480156102a357600080fd5b506101d56102b2366004614e15565b6108fc565b3480156102c357600080fd5b50610209610b5a565b3480156102d857600080fd5b506102fc6102e7366004614e67565b603a6020526000908152604090205460ff1681565b604051901515815260200161022a565b34801561031857600080fd5b506101d5610327366004614e84565b610bf2565b34801561033857600080fd5b50603b5461035590640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161022a565b34801561037a57600080fd5b5061039b610389366004614f60565b6000908152603c602052604090205490565b60405190815260200161022a565b3480156103b557600080fd5b506103f26040518060400160405280600581526020017f332e382e3000000000000000000000000000000000000000000000000000000081525081565b60405161022a9190614fef565b34801561040b57600080fd5b506102fc6112d6565b34801561042057600080fd5b506101d561042f366004615002565b611369565b34801561044057600080fd5b506101d561044f366004614e67565b611bfa565b34801561046057600080fd5b506101d561046f366004615039565b611cb5565b34801561048057600080fd5b506101d561048f366004615056565b611d6f565b3480156104a057600080fd5b506101d56104af366004615093565b611dbb565b3480156104c057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b3480156104f357600080fd5b506032546102099073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052057600080fd5b506102fc61052f366004614f60565b60336020526000908152604090205460ff1681565b34801561055057600080fd5b5061035561055f366004615105565b612070565b34801561057057600080fd5b5061020961057f366004615122565b61208f565b34801561059057600080fd5b506105f661059f366004615002565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161022a565b34801561063757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b34801561066a57600080fd5b506001546106c6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161022a565b6101d561070d366004615152565b61073f565b34801561071e57600080fd5b506038546102099073ffffffffffffffffffffffffffffffffffffffff1681565b8260005a9050838015610767575073ffffffffffffffffffffffffffffffffffffffff871615155b1561079e576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107a88351612070565b67ffffffffffffffff168567ffffffffffffffff1610156107f5576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c083511115610833576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33328114610854575033731111000000000000000000000000000000001111015b6000348888888860405160200161086f9594939291906151d1565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516108df9190614fef565b60405180910390a450506108f382826120f0565b50505050505050565b6109046112d6565b1561093b576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084015b60405180910390fd5b60006109f4836123c7565b9050610a008183611369565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558401516080850151606086015160a0870151610aa293929190612414565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610b0790841515815260200190565b60405180910390a280158015610b1d5750326001145b15610b54576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190615236565b905090565b610bfa6112d6565b15610c31576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016109e0565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190615253565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe91906152a0565b603b5490915063ffffffff848116911614610e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b610eb2610ead368890038801886152b9565b612472565b8114610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016109e0565b6000610f4b896123c7565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe919061534e565b6002811115610fcf57610fcf61531f565b0361105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d657300000000000060648201526084016109e0565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506111259101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f010000000000000000000000000000000000000000000000000000000000000060208301529061111b898b61536f565b8b604001356124b1565b6111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016109e0565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906153f3565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c697374656400000000000000000000000000000060648201526084016109e0565b816020015167ffffffffffffffff16600003611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a4016109e0565b60006115b38273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a69190615410565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff1611611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426116bd919061545c565b1161174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d61747572656420796574000000000000000000000060648201526084016109e0565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb919061534e565b60028111156117cc576117cc61531f565b14611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c6964617465640000000000000000000060648201526084016109e0565b603b5463ffffffff1663ffffffff166118e38373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118da9190615473565b63ffffffff1690565b63ffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b603b5467ffffffffffffffff64010000000090910481169082161015611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000611ab38373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b611ac79067ffffffffffffffff164261545c565b11611b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d6761700000000000000000000000000000000000000000000060648201526084016109e0565b60008581526033602052604090205460ff1615611bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016109e0565b5050505050565b611c02610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152603a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611cbd610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff929092167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909216919091176401000000004267ffffffffffffffff1602179055565b565b611d776112d6565b15611dae576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db881336108fc565b50565b600054610100900460ff1615808015611ddb5750600054600160ff909116105b80611df55750303b158015611df5575060005460ff166001145b611e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109e0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611edf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008684160217905560325416611fff576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b6120076124d5565b8015611bf357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600061207d826010615490565b612089906152086154c0565b92915050565b603c60205281600052604060002081815481106120ab57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090612126907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361545c565b905060006121326125e8565b90506000816020015160ff16826000015163ffffffff16612153919061551b565b9050821561228a5760015460009061218a908390700100000000000000000000000000000000900467ffffffffffffffff16615583565b90506000836040015160ff16836121a191906155f7565b6001546121c19084906fffffffffffffffffffffffffffffffff166155f7565b6121cb919061551b565b60015490915060009061221c906121f59084906fffffffffffffffffffffffffffffffff166156b3565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166126a9565b9050600186111561224b576122486121f582876040015160ff1660018a612243919061545c565b6126c8565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906122bd908490700100000000000000000000000000000000900467ffffffffffffffff166154c0565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561234a576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612376906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615727565b9050600061238848633b9aca0061271d565b6123929083615764565b905060005a6123a1908861545c565b9050808211156123bd576123bd6123b8828461545c565b612734565b5050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976123f7979096959101615778565b604051602081830303815290604052805190602001209050919050565b6000806000612424866000612762565b90508061245a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600081600001518260200151836040015184606001516040516020016123f7949392919093845260208401929092526040830152606082015260800190565b6000806124bd86612780565b90506124cb818686866127b2565b9695505050505050565b600054610100900460ff1661256c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109e0565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611d6d5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612685573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906157e5565b60006126be6126b885856127e2565b836127f2565b90505b9392505050565b6000670de0b6b3a76400006127096126e0858361551b565b6126f290670de0b6b3a7640000615583565b61270485670de0b6b3a76400006155f7565b612801565b61271390866155f7565b6126be919061551b565b60008183101561272d57816126c1565b5090919050565b6000805a90505b825a612747908361545c565b101561275d57612756826158a1565b915061273b565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161279c91815260200190565b6040516020818303038152906040529050919050565b60006127d9846127c3878686612832565b8051602091820120825192909101919091201490565b95945050505050565b60008183121561272d57816126c1565b600081831261272d57816126c1565b60006126c1670de0b6b3a764000083612819866132b0565b61282391906155f7565b61282d919061551b565b6134f4565b6060600084511161289f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016109e0565b60006128aa84613733565b905060006128b78661381f565b90506000846040516020016128ce91815260200190565b60405160208183030381529060405290506000805b8451811015613227576000858281518110612900576129006158d9565b60200260200101519050845183111561299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016109e0565b82600003612a5457805180516020918201206040516129e9926129c392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016109e0565b612bab565b805151602011612b0a5780518051602091820120604051612a7e926129c392910190815260200190565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016109e0565b805184516020808701919091208251919092012014612bab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016109e0565b612bb760106001615908565b81602001515103612d935784518303612d2b57612bf18160200151601081518110612be457612be46158d9565b6020026020010151613882565b96506000875111612c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016109e0565b60018651612c92919061545c565b8214612d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016109e0565b5050505050506126c1565b6000858481518110612d3f57612d3f6158d9565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612d6a57612d6a6158d9565b60200260200101519050612d7d816139e2565b9550612d8a600186615908565b94505050613214565b60028160200151510361318c576000612dab82613a07565b9050600081600081518110612dc257612dc26158d9565b016020015160f81c90506000612dd9600283615920565b612de4906002615942565b90506000612df5848360ff16613a2b565b90506000612e038a89613a2b565b90506000612e118383613a61565b905080835114612ea3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016109e0565b60ff851660021480612eb8575060ff85166003145b156130a75780825114612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016109e0565b612f678760200151600181518110612be457612be46158d9565b9c5060008d5111612ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016109e0565b60018c51613008919061545c565b8814613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016109e0565b5050505050505050505050506126c1565b60ff851615806130ba575060ff85166001145b156130f9576130e687602001516001815181106130d9576130d96158d9565b60200260200101516139e2565b99506130f2818a615908565b9850613181565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016109e0565b505050505050613214565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016109e0565b508061321f816158a1565b9150506128e3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016109e0565b600080821361331b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b6000606061332884613b15565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361352557506000919050565b680755bf798b4a1bf1e58212613597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016109e0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561375157613751614c38565b60405190808252806020026020018201604052801561379657816020015b604080518082019091526060808252602082015281526020019060019003908161376f5790505b50915060005b818110156138185760405180604001604052808583815181106137c1576137c16158d9565b602002602001015181526020016137f08684815181106137e3576137e36158d9565b6020026020010151613beb565b815250838281518110613805576138056158d9565b602090810291909101015260010161379c565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613877578060011b82018184015160001a8060041c8253600f811660018301535050600101613849565b509295945050505050565b6060600080600061389285613bfe565b9194509250905060008160018111156138ad576138ad61531f565b1461393a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016109e0565b6139448284615908565b8551146139d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016109e0565b6127d98560200151848461466b565b606060208260000151106139fe576139f982613882565b612089565b612089826146ff565b6060612089613a268360200151600081518110612be457612be46158d9565b61381f565b606082518210613a4a5750604080516020810190915260008152612089565b6126c18383848651613a5c919061545c565b614715565b6000808251845110613a74578251613a77565b83515b90505b8082108015613afe5750828281518110613a9657613a966158d9565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613ad557613ad56158d9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613b0e57816001019150613a7a565b5092915050565b6000808211613b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060612089613bf9836148ed565b6149d6565b600080600080846000015111613cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b6020840151805160001a607f8111613ce1576000600160009450945094505050614664565b60b78111613eef576000613cf660808361545c565b905080876000015111613db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016109e0565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613e2a57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016109e0565b5060019550935060009250614664915050565b60bf811161423d576000613f0460b78361545c565b905080876000015111613fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016109e0565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361409d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016109e0565b61416b8184615908565b895111614220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016109e0565b61422b836001615908565b97509550600094506146649350505050565b60f7811161431e57600061425260c08361545c565b90508087600001511161430d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b600195509350849250614664915050565b600061432b60f78361545c565b9050808760000151116143e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016109e0565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036144c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016109e0565b6145928184615908565b895111614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b614652836001615908565b97509550600194506146649350505050565b9193909250565b60608167ffffffffffffffff81111561468657614686614c38565b6040519080825280601f01601f1916602001820160405280156146b0576020820181803683370190505b50905081156126c15760006146c58486615908565b90506020820160005b848110156146e65782810151828201526020016146ce565b848111156146f5576000858301525b5050509392505050565b606061208982602001516000846000015161466b565b60608182601f011015614784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8282840110156147f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8183018451101561485d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b60608215801561487c57604051915060008252602082016040526148e4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156148b557805183526020928301920161489d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116149b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b50604080518082019091528151815260209182019181019190915290565b606060008060006149e685613bfe565b919450925090506001816001811115614a0157614a0161531f565b14614a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016109e0565b8451614a9a8385615908565b14614b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016109e0565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614b3e5790505093506000835b8651811015614c2c57600080614bb16040518060400160405280858c60000151614b95919061545c565b8152602001858c60200151614baa9190615908565b9052613bfe565b509150915060405180604001604052808383614bcd9190615908565b8152602001848b60200151614be29190615908565b815250888581518110614bf757614bf76158d9565b6020908102919091010152614c0d600185615908565b9350614c198183615908565b614c239084615908565b92505050614b6b565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cae57614cae614c38565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611db857600080fd5b600082601f830112614ce957600080fd5b813567ffffffffffffffff811115614d0357614d03614c38565b614d3460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614c67565b818152846020838601011115614d4957600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614d7857600080fd5b60405160c0810167ffffffffffffffff8282108183111715614d9c57614d9c614c38565b816040528293508435835260208501359150614db782614cb6565b81602084015260408501359150614dcd82614cb6565b816040840152606085013560608401526080850135608084015260a0850135915080821115614dfb57600080fd5b50614e0885828601614cd8565b60a0830152505092915050565b60008060408385031215614e2857600080fd5b823567ffffffffffffffff811115614e3f57600080fd5b614e4b85828601614d66565b9250506020830135614e5c81614cb6565b809150509250929050565b600060208284031215614e7957600080fd5b81356126c181614cb6565b600080600080600085870360e0811215614e9d57600080fd5b863567ffffffffffffffff80821115614eb557600080fd5b614ec18a838b01614d66565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614efa57600080fd5b60408901955060c0890135925080831115614f1457600080fd5b828901925089601f840112614f2857600080fd5b8235915080821115614f3957600080fd5b508860208260051b8401011115614f4f57600080fd5b959894975092955050506020019190565b600060208284031215614f7257600080fd5b5035919050565b60005b83811015614f94578181015183820152602001614f7c565b83811115610b545750506000910152565b60008151808452614fbd816020860160208601614f79565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006126c16020830184614fa5565b6000806040838503121561501557600080fd5b823591506020830135614e5c81614cb6565b63ffffffff81168114611db857600080fd5b60006020828403121561504b57600080fd5b81356126c181615027565b60006020828403121561506857600080fd5b813567ffffffffffffffff81111561507f57600080fd5b61508b84828501614d66565b949350505050565b600080600080608085870312156150a957600080fd5b84356150b481614cb6565b935060208501356150c481614cb6565b925060408501356150d481614cb6565b915060608501356150e481615027565b939692955090935050565b67ffffffffffffffff81168114611db857600080fd5b60006020828403121561511757600080fd5b81356126c1816150ef565b6000806040838503121561513557600080fd5b50508035926020909101359150565b8015158114611db857600080fd5b600080600080600060a0868803121561516a57600080fd5b853561517581614cb6565b945060208601359350604086013561518c816150ef565b9250606086013561519c81615144565b9150608086013567ffffffffffffffff8111156151b857600080fd5b6151c488828901614cd8565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615225816049850160208701614f79565b919091016049019695505050505050565b60006020828403121561524857600080fd5b81516126c181614cb6565b60008060006060848603121561526857600080fd5b835161527381615027565b6020850151909350615284816150ef565b604085015190925061529581614cb6565b809150509250925092565b6000602082840312156152b257600080fd5b5051919050565b6000608082840312156152cb57600080fd5b6040516080810181811067ffffffffffffffff821117156152ee576152ee614c38565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561536057600080fd5b8151600381106126c157600080fd5b600067ffffffffffffffff8084111561538a5761538a614c38565b8360051b602061539b818301614c67565b8681529185019181810190368411156153b357600080fd5b865b848110156153e7578035868111156153cd5760008081fd5b6153d936828b01614cd8565b8452509183019183016153b5565b50979650505050505050565b60006020828403121561540557600080fd5b81516126c181615144565b60006020828403121561542257600080fd5b81516126c1816150ef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561546e5761546e61542d565b500390565b60006020828403121561548557600080fd5b81516126c181615027565b600067ffffffffffffffff808316818516818304811182151516156154b7576154b761542d565b02949350505050565b600067ffffffffffffffff8083168185168083038211156154e3576154e361542d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261552a5761552a6154ec565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561557e5761557e61542d565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156155bd576155bd61542d565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156155f1576155f161542d565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156156385761563861542d565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156156735761567361542d565b6000871292508782058712848416161561568f5761568f61542d565b878505871281841616156156a5576156a561542d565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156156ed576156ed61542d565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156157215761572161542d565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561575f5761575f61542d565b500290565b600082615773576157736154ec565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526157c360c0830184614fa5565b98975050505050505050565b805160ff811681146157e057600080fd5b919050565b600060c082840312156157f757600080fd5b60405160c0810181811067ffffffffffffffff8211171561581a5761581a614c38565b604052825161582881615027565b8152615836602084016157cf565b6020820152615847604084016157cf565b6040820152606083015161585a81615027565b6060820152608083015161586d81615027565b608082015260a08301516fffffffffffffffffffffffffffffffff8116811461589557600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158d2576158d261542d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561591b5761591b61542d565b500190565b600060ff831680615933576159336154ec565b8060ff84160691505092915050565b600060ff821660ff84168082101561595c5761595c61542d565b9003939250505056fea164736f6c634300080f000a" + + +func init() { + if err := json.Unmarshal([]byte(OptimismPortal2StorageLayoutJSON), OptimismPortal2StorageLayout); err != nil { + panic(err) + } + + layouts["OptimismPortal2"] = OptimismPortal2StorageLayout + deployedBytecodes["OptimismPortal2"] = OptimismPortal2DeployedBin + immutableReferences["OptimismPortal2"] = true +} diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 89e3ce4314c..b0e71c9eb32 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -32,8 +32,8 @@ "sourceCodeHash": "0xf5fcf570721e25459fadbb37e02f9efe349e1c8afcbf1e3b5fdb09c9f612cdc0" }, "src/L1/OptimismPortal.sol": { - "initCodeHash": "0xc79b174a2fee37270257775ca8837e22da38a60c20965bddd05b98b8f0a15a0c", - "sourceCodeHash": "0xfb55e1acb7deb2a4560c86151b684c46e68a78492d3ef4795be420655e7d43f1" + "initCodeHash": "0xd243c33956b8ecdbcdddfa4e4bb3872efd31e31f5900463c335a1623afd926ab", + "sourceCodeHash": "0xdc724dd1af6a5db2c3c392600818d5b9cc03d9273df05e84a410c441073de9ba" }, "src/L1/OptimismPortal2.sol": { "initCodeHash": "0xea32d79e8297956d4f9a4c7985bb53ff8bb3735e5b307d4e118fea71f503a38e", diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json index 41969e6cac7..68a10a1c1e9 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json @@ -3314,7 +3314,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e372e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c52578560600151603d6000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b5050603d5490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3326,13 +3326,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", - "deployedCode": "0x60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e372e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c52578560600151603d6000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b5050603d5490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "deployedCode": "0x60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e372e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c52578560600151603d6000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b5050603d5490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3340,7 +3340,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3348,7 +3348,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3356,7 +3356,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3364,7 +3364,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3372,7 +3372,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3380,7 +3380,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3388,7 +3388,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3396,7 +3396,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3404,7 +3404,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3412,7 +3412,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3420,7 +3420,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3428,7 +3428,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3436,7 +3436,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3444,7 +3444,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3452,7 +3452,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3460,7 +3460,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3468,7 +3468,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3476,7 +3476,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": true, "newValue": "0x000000000000000100000000000000000000000000000000000000003b9aca00", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3484,7 +3484,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3492,7 +3492,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3564,7 +3564,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3578,7 +3578,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3590,7 +3590,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3604,7 +3604,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3616,7 +3616,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3630,7 +3630,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3642,7 +3642,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3656,7 +3656,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -11095,7 +11095,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000027e6edeea56f2366beee8431164c54d199813df00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd9266400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11121,7 +11121,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000027e6edeea56f2366beee8431164c54d199813df00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd9266400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -11187,7 +11187,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000027e6edeea56f2366beee8431164c54d199813df00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd9266400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11221,7 +11221,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef286000000000000000000000000027e6edeea56f2366beee8431164c54d199813df00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef286000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd9266400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11240,7 +11240,7 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": true, - "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -11250,7 +11250,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11444,8 +11444,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", - "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11454,7 +11454,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11530,8 +11530,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", - "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11540,7 +11540,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11582,8 +11582,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", - "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11592,7 +11592,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11634,8 +11634,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", - "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11644,7 +11644,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11738,8 +11738,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", - "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11748,7 +11748,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11842,8 +11842,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", - "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11852,7 +11852,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11946,8 +11946,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", - "previousValue": "0x000000000000000000000000027e6edeea56f2366beee8431164c54d199813df", + "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11956,7 +11956,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x027e6eDEea56F2366beeE8431164c54D199813df", + "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", "chainInfo": { "chainId": 31337, "forkId": 0 diff --git a/packages/contracts-bedrock/snapshots/storageLayout/OptimismPortal.json b/packages/contracts-bedrock/snapshots/storageLayout/OptimismPortal.json index 54572285a45..6eff1d1a079 100644 --- a/packages/contracts-bedrock/snapshots/storageLayout/OptimismPortal.json +++ b/packages/contracts-bedrock/snapshots/storageLayout/OptimismPortal.json @@ -76,11 +76,46 @@ "slot": "55", "type": "contract SystemConfig" }, + { + "bytes": "20", + "label": "spacer_56_0_20", + "offset": 0, + "slot": "56", + "type": "address" + }, + { + "bytes": "32", + "label": "spacer_57_0_32", + "offset": 0, + "slot": "57", + "type": "bytes32" + }, + { + "bytes": "32", + "label": "spacer_58_0_32", + "offset": 0, + "slot": "58", + "type": "bytes32" + }, + { + "bytes": "32", + "label": "spacer_59_0_32", + "offset": 0, + "slot": "59", + "type": "bytes32" + }, + { + "bytes": "32", + "label": "spacer_60_0_32", + "offset": 0, + "slot": "60", + "type": "bytes32" + }, { "bytes": "32", "label": "_balance", "offset": 0, - "slot": "56", + "slot": "61", "type": "uint256" } ] \ No newline at end of file diff --git a/packages/contracts-bedrock/src/L1/OptimismPortal.sol b/packages/contracts-bedrock/src/L1/OptimismPortal.sol index a13784e45bd..56b76b0cb9d 100644 --- a/packages/contracts-bedrock/src/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/src/L1/OptimismPortal.sol @@ -71,6 +71,26 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { /// @custom:network-specific SystemConfig public systemConfig; + /// @custom:spacer disputeGameFactory + /// @notice Spacer for backwards compatibility. + address private spacer_56_0_20; + + /// @custom:spacer provenWithdrawals + /// @notice Spacer for backwards compatibility. + bytes32 private spacer_57_0_32; + + /// @custom:spacer disputeGameBlacklist + /// @notice Spacer for backwards compatibility. + bytes32 private spacer_58_0_32; + + /// @custom:spacer respectedGameType + respectedGameTypeUpdatedAt + /// @notice Spacer for backwards compatibility. + bytes32 private spacer_59_0_32; + + /// @custom:spacer proofSubmitters + /// @notice Spacer for backwards compatibility. + bytes32 private spacer_60_0_32; + /// @notice The total amount of gas paying asset in the L2. Incremented on deposits and /// decremented on withdrawals. Mey be larger than the amount of gas paying asset /// for L2s that use ether to buy gas. @@ -103,8 +123,8 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { } /// @notice Semantic version. - /// @custom:semver 2.6.0-beta+custom-gas-token - string public constant version = "2.6.0-beta+custom-gas-token"; + /// @custom:semver 2.7.0-beta+custom-gas-token + string public constant version = "2.7.0-beta+custom-gas-token"; /// @notice Constructs the OptimismPortal contract. constructor() { diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index 82af4166dbd..3bec03f8474 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -21,7 +21,7 @@ contract DeploymentSummary is DeploymentSummaryCode { address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; - address internal constant optimismPortalAddress = 0x027e6eDEea56F2366beeE8431164c54D199813df; + address internal constant optimismPortalAddress = 0x885CB363B4F55C29E3497cD78b34fc863Fd92664; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; @@ -437,7 +437,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"000000000000000000000000000000000000000000000000000000000000000a"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000027e6edeea56f2366beee8431164c54d199813df"; + value = hex"000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index 9eb66cc0e63..c80bf17f231 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -35,7 +35,7 @@ contract DeploymentSummaryCode { bytes internal constant l1ERC721BridgeProxyCode = hex"60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a"; bytes internal constant optimismPortalCode = - hex"60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e362e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b886038600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c5257856060015160386000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b505060385490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; + hex"60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e372e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c52578560600151603d6000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b5050603d5490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; bytes internal constant l1CrossDomainMessengerCode = hex"60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant l2OutputOracleCode = From d3bf3cfd5da9ea1fb09374505b771bdbb412b1eb Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 30 Apr 2024 15:52:51 -0600 Subject: [PATCH 23/45] bindings: remove preview --- .../bindingspreview/optimismportal2.go | 1633 ----------------- .../bindingspreview/optimismportal2_more.go | 27 - 2 files changed, 1660 deletions(-) delete mode 100644 op-bindings/bindingspreview/optimismportal2.go delete mode 100644 op-bindings/bindingspreview/optimismportal2_more.go diff --git a/op-bindings/bindingspreview/optimismportal2.go b/op-bindings/bindingspreview/optimismportal2.go deleted file mode 100644 index 5223dcec05d..00000000000 --- a/op-bindings/bindingspreview/optimismportal2.go +++ /dev/null @@ -1,1633 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindingspreview - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription -) - -// TypesOutputRootProof is an auto generated low-level Go binding around an user-defined struct. -type TypesOutputRootProof struct { - Version [32]byte - StateRoot [32]byte - MessagePasserStorageRoot [32]byte - LatestBlockhash [32]byte -} - -// TypesWithdrawalTransaction is an auto generated low-level Go binding around an user-defined struct. -type TypesWithdrawalTransaction struct { - Nonce *big.Int - Sender common.Address - Target common.Address - Value *big.Int - GasLimit *big.Int - Data []byte -} - -// OptimismPortal2MetaData contains all meta data concerning the OptimismPortal2 contract. -var OptimismPortal2MetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_proofMaturityDelaySeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_disputeGameFinalityDelaySeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"blacklistDisputeGame\",\"inputs\":[{\"name\":\"_disputeGame\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkWithdrawal\",\"inputs\":[{\"name\":\"_withdrawalHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_proofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"disputeGameBlacklist\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractDisputeGameFactory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFinalityDelaySeconds\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransactionExternalProof\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_proofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_disputeGameFactory\",\"type\":\"address\",\"internalType\":\"contractDisputeGameFactory\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_initialRespectedGameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"numProofSubmitters\",\"inputs\":[{\"name\":\"_withdrawalHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofMaturityDelaySeconds\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofSubmitters\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_disputeGameIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provenWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"disputeGameProxy\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"respectedGameType\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"respectedGameTypeUpdatedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setRespectedGameType\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LargeCalldata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SmallGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[]}]", - Bin: "0x60c06040523480156200001157600080fd5b5060405162005cbd38038062005cbd8339810160408190526200003491620002f2565b608082905260a08190526200004d600080808062000055565b505062000317565b600054610100900460ff1615808015620000765750600054600160ff909116105b80620000a6575062000093306200022460201b620020d41760201c565b158015620000a6575060005460ff166001145b6200010f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000133576000805461ff0019166101001790555b603880546001600160a01b03199081166001600160a01b03888116919091179092556037805490911686831617905560358054610100600160a81b0319166101008684160217905560325416620001cc576032805461dead6001600160a01b0319909116179055603b80546001600160601b031916640100000000426001600160401b03160263ffffffff19161763ffffffff84161790555b620001d662000233565b80156200021d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002a05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000106565b600154600160c01b90046001600160401b0316600003620002f05760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b600080604083850312156200030657600080fd5b505080516020909101519092909150565b60805160a0516159726200034b600039600081816104c30152611a4601526000818161063a015261168401526159726000f3fe6080604052600436106101b05760003560e01c80637fc48504116100ec578063a35d99df1161008a578063bf653a5c11610064578063bf653a5c1461062b578063cff0ab961461065e578063e9e05c42146106ff578063f2b4e6171461071257600080fd5b8063a35d99df14610544578063a3860f4814610564578063bb2c727e1461058457600080fd5b80638e819e54116100c65780638e819e5414610494578063952b2797146104b45780639bf62d82146104e7578063a14238e71461051457600080fd5b80637fc48504146104545780638b4c40b0146101d55780638c3152e91461047457600080fd5b80634870496f1161015957806354fd4d501161013357806354fd4d50146103a95780635c975abb146103ff57806371c1566e146104145780637d6be8dc1461043457600080fd5b80634870496f1461030c5780634fd0434c1461032c578063513747ab1461036e57600080fd5b806343ca1c501161018a57806343ca1c5014610297578063452a9320146102b757806345884d32146102cc57600080fd5b806333d7e2bd146101dc57806335e80ab3146102335780633c9f397c1461026557600080fd5b366101d7576101d53334620186a060006040518060200160405280600081525061073f565b005b600080fd5b3480156101e857600080fd5b506037546102099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023f57600080fd5b5060355461020990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561027157600080fd5b50603b546102829063ffffffff1681565b60405163ffffffff909116815260200161022a565b3480156102a357600080fd5b506101d56102b2366004614e15565b6108fc565b3480156102c357600080fd5b50610209610b5a565b3480156102d857600080fd5b506102fc6102e7366004614e67565b603a6020526000908152604090205460ff1681565b604051901515815260200161022a565b34801561031857600080fd5b506101d5610327366004614e84565b610bf2565b34801561033857600080fd5b50603b5461035590640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161022a565b34801561037a57600080fd5b5061039b610389366004614f60565b6000908152603c602052604090205490565b60405190815260200161022a565b3480156103b557600080fd5b506103f26040518060400160405280600581526020017f332e382e3000000000000000000000000000000000000000000000000000000081525081565b60405161022a9190614fef565b34801561040b57600080fd5b506102fc6112d6565b34801561042057600080fd5b506101d561042f366004615002565b611369565b34801561044057600080fd5b506101d561044f366004614e67565b611bfa565b34801561046057600080fd5b506101d561046f366004615039565b611cb5565b34801561048057600080fd5b506101d561048f366004615056565b611d6f565b3480156104a057600080fd5b506101d56104af366004615093565b611dbb565b3480156104c057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b3480156104f357600080fd5b506032546102099073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052057600080fd5b506102fc61052f366004614f60565b60336020526000908152604090205460ff1681565b34801561055057600080fd5b5061035561055f366004615105565b612070565b34801561057057600080fd5b5061020961057f366004615122565b61208f565b34801561059057600080fd5b506105f661059f366004615002565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161022a565b34801561063757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b34801561066a57600080fd5b506001546106c6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161022a565b6101d561070d366004615152565b61073f565b34801561071e57600080fd5b506038546102099073ffffffffffffffffffffffffffffffffffffffff1681565b8260005a9050838015610767575073ffffffffffffffffffffffffffffffffffffffff871615155b1561079e576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107a88351612070565b67ffffffffffffffff168567ffffffffffffffff1610156107f5576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c083511115610833576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33328114610854575033731111000000000000000000000000000000001111015b6000348888888860405160200161086f9594939291906151d1565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516108df9190614fef565b60405180910390a450506108f382826120f0565b50505050505050565b6109046112d6565b1561093b576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084015b60405180910390fd5b60006109f4836123c7565b9050610a008183611369565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558401516080850151606086015160a0870151610aa293929190612414565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610b0790841515815260200190565b60405180910390a280158015610b1d5750326001145b15610b54576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190615236565b905090565b610bfa6112d6565b15610c31576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016109e0565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190615253565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe91906152a0565b603b5490915063ffffffff848116911614610e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b610eb2610ead368890038801886152b9565b612472565b8114610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016109e0565b6000610f4b896123c7565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe919061534e565b6002811115610fcf57610fcf61531f565b0361105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d657300000000000060648201526084016109e0565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506111259101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f010000000000000000000000000000000000000000000000000000000000000060208301529061111b898b61536f565b8b604001356124b1565b6111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016109e0565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906153f3565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c697374656400000000000000000000000000000060648201526084016109e0565b816020015167ffffffffffffffff16600003611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a4016109e0565b60006115b38273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a69190615410565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff1611611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426116bd919061545c565b1161174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d61747572656420796574000000000000000000000060648201526084016109e0565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb919061534e565b60028111156117cc576117cc61531f565b14611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c6964617465640000000000000000000060648201526084016109e0565b603b5463ffffffff1663ffffffff166118e38373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118da9190615473565b63ffffffff1690565b63ffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b603b5467ffffffffffffffff64010000000090910481169082161015611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000611ab38373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b611ac79067ffffffffffffffff164261545c565b11611b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d6761700000000000000000000000000000000000000000000060648201526084016109e0565b60008581526033602052604090205460ff1615611bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016109e0565b5050505050565b611c02610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152603a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611cbd610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff929092167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909216919091176401000000004267ffffffffffffffff1602179055565b565b611d776112d6565b15611dae576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db881336108fc565b50565b600054610100900460ff1615808015611ddb5750600054600160ff909116105b80611df55750303b158015611df5575060005460ff166001145b611e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109e0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611edf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008684160217905560325416611fff576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b6120076124d5565b8015611bf357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600061207d826010615490565b612089906152086154c0565b92915050565b603c60205281600052604060002081815481106120ab57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090612126907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361545c565b905060006121326125e8565b90506000816020015160ff16826000015163ffffffff16612153919061551b565b9050821561228a5760015460009061218a908390700100000000000000000000000000000000900467ffffffffffffffff16615583565b90506000836040015160ff16836121a191906155f7565b6001546121c19084906fffffffffffffffffffffffffffffffff166155f7565b6121cb919061551b565b60015490915060009061221c906121f59084906fffffffffffffffffffffffffffffffff166156b3565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166126a9565b9050600186111561224b576122486121f582876040015160ff1660018a612243919061545c565b6126c8565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906122bd908490700100000000000000000000000000000000900467ffffffffffffffff166154c0565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561234a576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612376906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615727565b9050600061238848633b9aca0061271d565b6123929083615764565b905060005a6123a1908861545c565b9050808211156123bd576123bd6123b8828461545c565b612734565b5050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976123f7979096959101615778565b604051602081830303815290604052805190602001209050919050565b6000806000612424866000612762565b90508061245a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600081600001518260200151836040015184606001516040516020016123f7949392919093845260208401929092526040830152606082015260800190565b6000806124bd86612780565b90506124cb818686866127b2565b9695505050505050565b600054610100900460ff1661256c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109e0565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611d6d5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612685573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906157e5565b60006126be6126b885856127e2565b836127f2565b90505b9392505050565b6000670de0b6b3a76400006127096126e0858361551b565b6126f290670de0b6b3a7640000615583565b61270485670de0b6b3a76400006155f7565b612801565b61271390866155f7565b6126be919061551b565b60008183101561272d57816126c1565b5090919050565b6000805a90505b825a612747908361545c565b101561275d57612756826158a1565b915061273b565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161279c91815260200190565b6040516020818303038152906040529050919050565b60006127d9846127c3878686612832565b8051602091820120825192909101919091201490565b95945050505050565b60008183121561272d57816126c1565b600081831261272d57816126c1565b60006126c1670de0b6b3a764000083612819866132b0565b61282391906155f7565b61282d919061551b565b6134f4565b6060600084511161289f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016109e0565b60006128aa84613733565b905060006128b78661381f565b90506000846040516020016128ce91815260200190565b60405160208183030381529060405290506000805b8451811015613227576000858281518110612900576129006158d9565b60200260200101519050845183111561299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016109e0565b82600003612a5457805180516020918201206040516129e9926129c392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016109e0565b612bab565b805151602011612b0a5780518051602091820120604051612a7e926129c392910190815260200190565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016109e0565b805184516020808701919091208251919092012014612bab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016109e0565b612bb760106001615908565b81602001515103612d935784518303612d2b57612bf18160200151601081518110612be457612be46158d9565b6020026020010151613882565b96506000875111612c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016109e0565b60018651612c92919061545c565b8214612d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016109e0565b5050505050506126c1565b6000858481518110612d3f57612d3f6158d9565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612d6a57612d6a6158d9565b60200260200101519050612d7d816139e2565b9550612d8a600186615908565b94505050613214565b60028160200151510361318c576000612dab82613a07565b9050600081600081518110612dc257612dc26158d9565b016020015160f81c90506000612dd9600283615920565b612de4906002615942565b90506000612df5848360ff16613a2b565b90506000612e038a89613a2b565b90506000612e118383613a61565b905080835114612ea3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016109e0565b60ff851660021480612eb8575060ff85166003145b156130a75780825114612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016109e0565b612f678760200151600181518110612be457612be46158d9565b9c5060008d5111612ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016109e0565b60018c51613008919061545c565b8814613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016109e0565b5050505050505050505050506126c1565b60ff851615806130ba575060ff85166001145b156130f9576130e687602001516001815181106130d9576130d96158d9565b60200260200101516139e2565b99506130f2818a615908565b9850613181565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016109e0565b505050505050613214565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016109e0565b508061321f816158a1565b9150506128e3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016109e0565b600080821361331b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b6000606061332884613b15565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361352557506000919050565b680755bf798b4a1bf1e58212613597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016109e0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561375157613751614c38565b60405190808252806020026020018201604052801561379657816020015b604080518082019091526060808252602082015281526020019060019003908161376f5790505b50915060005b818110156138185760405180604001604052808583815181106137c1576137c16158d9565b602002602001015181526020016137f08684815181106137e3576137e36158d9565b6020026020010151613beb565b815250838281518110613805576138056158d9565b602090810291909101015260010161379c565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613877578060011b82018184015160001a8060041c8253600f811660018301535050600101613849565b509295945050505050565b6060600080600061389285613bfe565b9194509250905060008160018111156138ad576138ad61531f565b1461393a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016109e0565b6139448284615908565b8551146139d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016109e0565b6127d98560200151848461466b565b606060208260000151106139fe576139f982613882565b612089565b612089826146ff565b6060612089613a268360200151600081518110612be457612be46158d9565b61381f565b606082518210613a4a5750604080516020810190915260008152612089565b6126c18383848651613a5c919061545c565b614715565b6000808251845110613a74578251613a77565b83515b90505b8082108015613afe5750828281518110613a9657613a966158d9565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613ad557613ad56158d9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613b0e57816001019150613a7a565b5092915050565b6000808211613b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060612089613bf9836148ed565b6149d6565b600080600080846000015111613cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b6020840151805160001a607f8111613ce1576000600160009450945094505050614664565b60b78111613eef576000613cf660808361545c565b905080876000015111613db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016109e0565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613e2a57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016109e0565b5060019550935060009250614664915050565b60bf811161423d576000613f0460b78361545c565b905080876000015111613fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016109e0565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361409d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016109e0565b61416b8184615908565b895111614220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016109e0565b61422b836001615908565b97509550600094506146649350505050565b60f7811161431e57600061425260c08361545c565b90508087600001511161430d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b600195509350849250614664915050565b600061432b60f78361545c565b9050808760000151116143e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016109e0565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036144c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016109e0565b6145928184615908565b895111614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b614652836001615908565b97509550600194506146649350505050565b9193909250565b60608167ffffffffffffffff81111561468657614686614c38565b6040519080825280601f01601f1916602001820160405280156146b0576020820181803683370190505b50905081156126c15760006146c58486615908565b90506020820160005b848110156146e65782810151828201526020016146ce565b848111156146f5576000858301525b5050509392505050565b606061208982602001516000846000015161466b565b60608182601f011015614784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8282840110156147f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8183018451101561485d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b60608215801561487c57604051915060008252602082016040526148e4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156148b557805183526020928301920161489d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116149b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b50604080518082019091528151815260209182019181019190915290565b606060008060006149e685613bfe565b919450925090506001816001811115614a0157614a0161531f565b14614a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016109e0565b8451614a9a8385615908565b14614b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016109e0565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614b3e5790505093506000835b8651811015614c2c57600080614bb16040518060400160405280858c60000151614b95919061545c565b8152602001858c60200151614baa9190615908565b9052613bfe565b509150915060405180604001604052808383614bcd9190615908565b8152602001848b60200151614be29190615908565b815250888581518110614bf757614bf76158d9565b6020908102919091010152614c0d600185615908565b9350614c198183615908565b614c239084615908565b92505050614b6b565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cae57614cae614c38565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611db857600080fd5b600082601f830112614ce957600080fd5b813567ffffffffffffffff811115614d0357614d03614c38565b614d3460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614c67565b818152846020838601011115614d4957600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614d7857600080fd5b60405160c0810167ffffffffffffffff8282108183111715614d9c57614d9c614c38565b816040528293508435835260208501359150614db782614cb6565b81602084015260408501359150614dcd82614cb6565b816040840152606085013560608401526080850135608084015260a0850135915080821115614dfb57600080fd5b50614e0885828601614cd8565b60a0830152505092915050565b60008060408385031215614e2857600080fd5b823567ffffffffffffffff811115614e3f57600080fd5b614e4b85828601614d66565b9250506020830135614e5c81614cb6565b809150509250929050565b600060208284031215614e7957600080fd5b81356126c181614cb6565b600080600080600085870360e0811215614e9d57600080fd5b863567ffffffffffffffff80821115614eb557600080fd5b614ec18a838b01614d66565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614efa57600080fd5b60408901955060c0890135925080831115614f1457600080fd5b828901925089601f840112614f2857600080fd5b8235915080821115614f3957600080fd5b508860208260051b8401011115614f4f57600080fd5b959894975092955050506020019190565b600060208284031215614f7257600080fd5b5035919050565b60005b83811015614f94578181015183820152602001614f7c565b83811115610b545750506000910152565b60008151808452614fbd816020860160208601614f79565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006126c16020830184614fa5565b6000806040838503121561501557600080fd5b823591506020830135614e5c81614cb6565b63ffffffff81168114611db857600080fd5b60006020828403121561504b57600080fd5b81356126c181615027565b60006020828403121561506857600080fd5b813567ffffffffffffffff81111561507f57600080fd5b61508b84828501614d66565b949350505050565b600080600080608085870312156150a957600080fd5b84356150b481614cb6565b935060208501356150c481614cb6565b925060408501356150d481614cb6565b915060608501356150e481615027565b939692955090935050565b67ffffffffffffffff81168114611db857600080fd5b60006020828403121561511757600080fd5b81356126c1816150ef565b6000806040838503121561513557600080fd5b50508035926020909101359150565b8015158114611db857600080fd5b600080600080600060a0868803121561516a57600080fd5b853561517581614cb6565b945060208601359350604086013561518c816150ef565b9250606086013561519c81615144565b9150608086013567ffffffffffffffff8111156151b857600080fd5b6151c488828901614cd8565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615225816049850160208701614f79565b919091016049019695505050505050565b60006020828403121561524857600080fd5b81516126c181614cb6565b60008060006060848603121561526857600080fd5b835161527381615027565b6020850151909350615284816150ef565b604085015190925061529581614cb6565b809150509250925092565b6000602082840312156152b257600080fd5b5051919050565b6000608082840312156152cb57600080fd5b6040516080810181811067ffffffffffffffff821117156152ee576152ee614c38565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561536057600080fd5b8151600381106126c157600080fd5b600067ffffffffffffffff8084111561538a5761538a614c38565b8360051b602061539b818301614c67565b8681529185019181810190368411156153b357600080fd5b865b848110156153e7578035868111156153cd5760008081fd5b6153d936828b01614cd8565b8452509183019183016153b5565b50979650505050505050565b60006020828403121561540557600080fd5b81516126c181615144565b60006020828403121561542257600080fd5b81516126c1816150ef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561546e5761546e61542d565b500390565b60006020828403121561548557600080fd5b81516126c181615027565b600067ffffffffffffffff808316818516818304811182151516156154b7576154b761542d565b02949350505050565b600067ffffffffffffffff8083168185168083038211156154e3576154e361542d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261552a5761552a6154ec565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561557e5761557e61542d565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156155bd576155bd61542d565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156155f1576155f161542d565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156156385761563861542d565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156156735761567361542d565b6000871292508782058712848416161561568f5761568f61542d565b878505871281841616156156a5576156a561542d565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156156ed576156ed61542d565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156157215761572161542d565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561575f5761575f61542d565b500290565b600082615773576157736154ec565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526157c360c0830184614fa5565b98975050505050505050565b805160ff811681146157e057600080fd5b919050565b600060c082840312156157f757600080fd5b60405160c0810181811067ffffffffffffffff8211171561581a5761581a614c38565b604052825161582881615027565b8152615836602084016157cf565b6020820152615847604084016157cf565b6040820152606083015161585a81615027565b6060820152608083015161586d81615027565b608082015260a08301516fffffffffffffffffffffffffffffffff8116811461589557600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158d2576158d261542d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561591b5761591b61542d565b500190565b600060ff831680615933576159336154ec565b8060ff84160691505092915050565b600060ff821660ff84168082101561595c5761595c61542d565b9003939250505056fea164736f6c634300080f000a", -} - -// OptimismPortal2ABI is the input ABI used to generate the binding from. -// Deprecated: Use OptimismPortal2MetaData.ABI instead. -var OptimismPortal2ABI = OptimismPortal2MetaData.ABI - -// OptimismPortal2Bin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use OptimismPortal2MetaData.Bin instead. -var OptimismPortal2Bin = OptimismPortal2MetaData.Bin - -// DeployOptimismPortal2 deploys a new Ethereum contract, binding an instance of OptimismPortal2 to it. -func DeployOptimismPortal2(auth *bind.TransactOpts, backend bind.ContractBackend, _proofMaturityDelaySeconds *big.Int, _disputeGameFinalityDelaySeconds *big.Int) (common.Address, *types.Transaction, *OptimismPortal2, error) { - parsed, err := OptimismPortal2MetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismPortal2Bin), backend, _proofMaturityDelaySeconds, _disputeGameFinalityDelaySeconds) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &OptimismPortal2{OptimismPortal2Caller: OptimismPortal2Caller{contract: contract}, OptimismPortal2Transactor: OptimismPortal2Transactor{contract: contract}, OptimismPortal2Filterer: OptimismPortal2Filterer{contract: contract}}, nil -} - -// OptimismPortal2 is an auto generated Go binding around an Ethereum contract. -type OptimismPortal2 struct { - OptimismPortal2Caller // Read-only binding to the contract - OptimismPortal2Transactor // Write-only binding to the contract - OptimismPortal2Filterer // Log filterer for contract events -} - -// OptimismPortal2Caller is an auto generated read-only Go binding around an Ethereum contract. -type OptimismPortal2Caller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismPortal2Transactor is an auto generated write-only Go binding around an Ethereum contract. -type OptimismPortal2Transactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismPortal2Filterer is an auto generated log filtering Go binding around an Ethereum contract events. -type OptimismPortal2Filterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// OptimismPortal2Session is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type OptimismPortal2Session struct { - Contract *OptimismPortal2 // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// OptimismPortal2CallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type OptimismPortal2CallerSession struct { - Contract *OptimismPortal2Caller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// OptimismPortal2TransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type OptimismPortal2TransactorSession struct { - Contract *OptimismPortal2Transactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// OptimismPortal2Raw is an auto generated low-level Go binding around an Ethereum contract. -type OptimismPortal2Raw struct { - Contract *OptimismPortal2 // Generic contract binding to access the raw methods on -} - -// OptimismPortal2CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type OptimismPortal2CallerRaw struct { - Contract *OptimismPortal2Caller // Generic read-only contract binding to access the raw methods on -} - -// OptimismPortal2TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type OptimismPortal2TransactorRaw struct { - Contract *OptimismPortal2Transactor // Generic write-only contract binding to access the raw methods on -} - -// NewOptimismPortal2 creates a new instance of OptimismPortal2, bound to a specific deployed contract. -func NewOptimismPortal2(address common.Address, backend bind.ContractBackend) (*OptimismPortal2, error) { - contract, err := bindOptimismPortal2(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &OptimismPortal2{OptimismPortal2Caller: OptimismPortal2Caller{contract: contract}, OptimismPortal2Transactor: OptimismPortal2Transactor{contract: contract}, OptimismPortal2Filterer: OptimismPortal2Filterer{contract: contract}}, nil -} - -// NewOptimismPortal2Caller creates a new read-only instance of OptimismPortal2, bound to a specific deployed contract. -func NewOptimismPortal2Caller(address common.Address, caller bind.ContractCaller) (*OptimismPortal2Caller, error) { - contract, err := bindOptimismPortal2(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &OptimismPortal2Caller{contract: contract}, nil -} - -// NewOptimismPortal2Transactor creates a new write-only instance of OptimismPortal2, bound to a specific deployed contract. -func NewOptimismPortal2Transactor(address common.Address, transactor bind.ContractTransactor) (*OptimismPortal2Transactor, error) { - contract, err := bindOptimismPortal2(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &OptimismPortal2Transactor{contract: contract}, nil -} - -// NewOptimismPortal2Filterer creates a new log filterer instance of OptimismPortal2, bound to a specific deployed contract. -func NewOptimismPortal2Filterer(address common.Address, filterer bind.ContractFilterer) (*OptimismPortal2Filterer, error) { - contract, err := bindOptimismPortal2(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &OptimismPortal2Filterer{contract: contract}, nil -} - -// bindOptimismPortal2 binds a generic wrapper to an already deployed contract. -func bindOptimismPortal2(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(OptimismPortal2ABI)) - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_OptimismPortal2 *OptimismPortal2Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _OptimismPortal2.Contract.OptimismPortal2Caller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_OptimismPortal2 *OptimismPortal2Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal2.Contract.OptimismPortal2Transactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_OptimismPortal2 *OptimismPortal2Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _OptimismPortal2.Contract.OptimismPortal2Transactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_OptimismPortal2 *OptimismPortal2CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _OptimismPortal2.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_OptimismPortal2 *OptimismPortal2TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal2.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_OptimismPortal2 *OptimismPortal2TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _OptimismPortal2.Contract.contract.Transact(opts, method, params...) -} - -// CheckWithdrawal is a free data retrieval call binding the contract method 0x71c1566e. -// -// Solidity: function checkWithdrawal(bytes32 _withdrawalHash, address _proofSubmitter) view returns() -func (_OptimismPortal2 *OptimismPortal2Caller) CheckWithdrawal(opts *bind.CallOpts, _withdrawalHash [32]byte, _proofSubmitter common.Address) error { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "checkWithdrawal", _withdrawalHash, _proofSubmitter) - - if err != nil { - return err - } - - return err - -} - -// CheckWithdrawal is a free data retrieval call binding the contract method 0x71c1566e. -// -// Solidity: function checkWithdrawal(bytes32 _withdrawalHash, address _proofSubmitter) view returns() -func (_OptimismPortal2 *OptimismPortal2Session) CheckWithdrawal(_withdrawalHash [32]byte, _proofSubmitter common.Address) error { - return _OptimismPortal2.Contract.CheckWithdrawal(&_OptimismPortal2.CallOpts, _withdrawalHash, _proofSubmitter) -} - -// CheckWithdrawal is a free data retrieval call binding the contract method 0x71c1566e. -// -// Solidity: function checkWithdrawal(bytes32 _withdrawalHash, address _proofSubmitter) view returns() -func (_OptimismPortal2 *OptimismPortal2CallerSession) CheckWithdrawal(_withdrawalHash [32]byte, _proofSubmitter common.Address) error { - return _OptimismPortal2.Contract.CheckWithdrawal(&_OptimismPortal2.CallOpts, _withdrawalHash, _proofSubmitter) -} - -// DisputeGameBlacklist is a free data retrieval call binding the contract method 0x45884d32. -// -// Solidity: function disputeGameBlacklist(address ) view returns(bool) -func (_OptimismPortal2 *OptimismPortal2Caller) DisputeGameBlacklist(opts *bind.CallOpts, arg0 common.Address) (bool, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "disputeGameBlacklist", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// DisputeGameBlacklist is a free data retrieval call binding the contract method 0x45884d32. -// -// Solidity: function disputeGameBlacklist(address ) view returns(bool) -func (_OptimismPortal2 *OptimismPortal2Session) DisputeGameBlacklist(arg0 common.Address) (bool, error) { - return _OptimismPortal2.Contract.DisputeGameBlacklist(&_OptimismPortal2.CallOpts, arg0) -} - -// DisputeGameBlacklist is a free data retrieval call binding the contract method 0x45884d32. -// -// Solidity: function disputeGameBlacklist(address ) view returns(bool) -func (_OptimismPortal2 *OptimismPortal2CallerSession) DisputeGameBlacklist(arg0 common.Address) (bool, error) { - return _OptimismPortal2.Contract.DisputeGameBlacklist(&_OptimismPortal2.CallOpts, arg0) -} - -// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. -// -// Solidity: function disputeGameFactory() view returns(address) -func (_OptimismPortal2 *OptimismPortal2Caller) DisputeGameFactory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "disputeGameFactory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. -// -// Solidity: function disputeGameFactory() view returns(address) -func (_OptimismPortal2 *OptimismPortal2Session) DisputeGameFactory() (common.Address, error) { - return _OptimismPortal2.Contract.DisputeGameFactory(&_OptimismPortal2.CallOpts) -} - -// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. -// -// Solidity: function disputeGameFactory() view returns(address) -func (_OptimismPortal2 *OptimismPortal2CallerSession) DisputeGameFactory() (common.Address, error) { - return _OptimismPortal2.Contract.DisputeGameFactory(&_OptimismPortal2.CallOpts) -} - -// DisputeGameFinalityDelaySeconds is a free data retrieval call binding the contract method 0x952b2797. -// -// Solidity: function disputeGameFinalityDelaySeconds() view returns(uint256) -func (_OptimismPortal2 *OptimismPortal2Caller) DisputeGameFinalityDelaySeconds(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "disputeGameFinalityDelaySeconds") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// DisputeGameFinalityDelaySeconds is a free data retrieval call binding the contract method 0x952b2797. -// -// Solidity: function disputeGameFinalityDelaySeconds() view returns(uint256) -func (_OptimismPortal2 *OptimismPortal2Session) DisputeGameFinalityDelaySeconds() (*big.Int, error) { - return _OptimismPortal2.Contract.DisputeGameFinalityDelaySeconds(&_OptimismPortal2.CallOpts) -} - -// DisputeGameFinalityDelaySeconds is a free data retrieval call binding the contract method 0x952b2797. -// -// Solidity: function disputeGameFinalityDelaySeconds() view returns(uint256) -func (_OptimismPortal2 *OptimismPortal2CallerSession) DisputeGameFinalityDelaySeconds() (*big.Int, error) { - return _OptimismPortal2.Contract.DisputeGameFinalityDelaySeconds(&_OptimismPortal2.CallOpts) -} - -// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. -// -// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) -func (_OptimismPortal2 *OptimismPortal2Caller) FinalizedWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "finalizedWithdrawals", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. -// -// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) -func (_OptimismPortal2 *OptimismPortal2Session) FinalizedWithdrawals(arg0 [32]byte) (bool, error) { - return _OptimismPortal2.Contract.FinalizedWithdrawals(&_OptimismPortal2.CallOpts, arg0) -} - -// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. -// -// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) -func (_OptimismPortal2 *OptimismPortal2CallerSession) FinalizedWithdrawals(arg0 [32]byte) (bool, error) { - return _OptimismPortal2.Contract.FinalizedWithdrawals(&_OptimismPortal2.CallOpts, arg0) -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_OptimismPortal2 *OptimismPortal2Caller) Guardian(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "guardian") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_OptimismPortal2 *OptimismPortal2Session) Guardian() (common.Address, error) { - return _OptimismPortal2.Contract.Guardian(&_OptimismPortal2.CallOpts) -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_OptimismPortal2 *OptimismPortal2CallerSession) Guardian() (common.Address, error) { - return _OptimismPortal2.Contract.Guardian(&_OptimismPortal2.CallOpts) -} - -// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. -// -// Solidity: function l2Sender() view returns(address) -func (_OptimismPortal2 *OptimismPortal2Caller) L2Sender(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "l2Sender") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. -// -// Solidity: function l2Sender() view returns(address) -func (_OptimismPortal2 *OptimismPortal2Session) L2Sender() (common.Address, error) { - return _OptimismPortal2.Contract.L2Sender(&_OptimismPortal2.CallOpts) -} - -// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. -// -// Solidity: function l2Sender() view returns(address) -func (_OptimismPortal2 *OptimismPortal2CallerSession) L2Sender() (common.Address, error) { - return _OptimismPortal2.Contract.L2Sender(&_OptimismPortal2.CallOpts) -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. -// -// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) -func (_OptimismPortal2 *OptimismPortal2Caller) MinimumGasLimit(opts *bind.CallOpts, _byteCount uint64) (uint64, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "minimumGasLimit", _byteCount) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. -// -// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) -func (_OptimismPortal2 *OptimismPortal2Session) MinimumGasLimit(_byteCount uint64) (uint64, error) { - return _OptimismPortal2.Contract.MinimumGasLimit(&_OptimismPortal2.CallOpts, _byteCount) -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. -// -// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) -func (_OptimismPortal2 *OptimismPortal2CallerSession) MinimumGasLimit(_byteCount uint64) (uint64, error) { - return _OptimismPortal2.Contract.MinimumGasLimit(&_OptimismPortal2.CallOpts, _byteCount) -} - -// NumProofSubmitters is a free data retrieval call binding the contract method 0x513747ab. -// -// Solidity: function numProofSubmitters(bytes32 _withdrawalHash) view returns(uint256) -func (_OptimismPortal2 *OptimismPortal2Caller) NumProofSubmitters(opts *bind.CallOpts, _withdrawalHash [32]byte) (*big.Int, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "numProofSubmitters", _withdrawalHash) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// NumProofSubmitters is a free data retrieval call binding the contract method 0x513747ab. -// -// Solidity: function numProofSubmitters(bytes32 _withdrawalHash) view returns(uint256) -func (_OptimismPortal2 *OptimismPortal2Session) NumProofSubmitters(_withdrawalHash [32]byte) (*big.Int, error) { - return _OptimismPortal2.Contract.NumProofSubmitters(&_OptimismPortal2.CallOpts, _withdrawalHash) -} - -// NumProofSubmitters is a free data retrieval call binding the contract method 0x513747ab. -// -// Solidity: function numProofSubmitters(bytes32 _withdrawalHash) view returns(uint256) -func (_OptimismPortal2 *OptimismPortal2CallerSession) NumProofSubmitters(_withdrawalHash [32]byte) (*big.Int, error) { - return _OptimismPortal2.Contract.NumProofSubmitters(&_OptimismPortal2.CallOpts, _withdrawalHash) -} - -// Params is a free data retrieval call binding the contract method 0xcff0ab96. -// -// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) -func (_OptimismPortal2 *OptimismPortal2Caller) Params(opts *bind.CallOpts) (struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 -}, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "params") - - outstruct := new(struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 - }) - if err != nil { - return *outstruct, err - } - - outstruct.PrevBaseFee = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - outstruct.PrevBoughtGas = *abi.ConvertType(out[1], new(uint64)).(*uint64) - outstruct.PrevBlockNum = *abi.ConvertType(out[2], new(uint64)).(*uint64) - - return *outstruct, err - -} - -// Params is a free data retrieval call binding the contract method 0xcff0ab96. -// -// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) -func (_OptimismPortal2 *OptimismPortal2Session) Params() (struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 -}, error) { - return _OptimismPortal2.Contract.Params(&_OptimismPortal2.CallOpts) -} - -// Params is a free data retrieval call binding the contract method 0xcff0ab96. -// -// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) -func (_OptimismPortal2 *OptimismPortal2CallerSession) Params() (struct { - PrevBaseFee *big.Int - PrevBoughtGas uint64 - PrevBlockNum uint64 -}, error) { - return _OptimismPortal2.Contract.Params(&_OptimismPortal2.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_OptimismPortal2 *OptimismPortal2Caller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_OptimismPortal2 *OptimismPortal2Session) Paused() (bool, error) { - return _OptimismPortal2.Contract.Paused(&_OptimismPortal2.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_OptimismPortal2 *OptimismPortal2CallerSession) Paused() (bool, error) { - return _OptimismPortal2.Contract.Paused(&_OptimismPortal2.CallOpts) -} - -// ProofMaturityDelaySeconds is a free data retrieval call binding the contract method 0xbf653a5c. -// -// Solidity: function proofMaturityDelaySeconds() view returns(uint256) -func (_OptimismPortal2 *OptimismPortal2Caller) ProofMaturityDelaySeconds(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "proofMaturityDelaySeconds") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// ProofMaturityDelaySeconds is a free data retrieval call binding the contract method 0xbf653a5c. -// -// Solidity: function proofMaturityDelaySeconds() view returns(uint256) -func (_OptimismPortal2 *OptimismPortal2Session) ProofMaturityDelaySeconds() (*big.Int, error) { - return _OptimismPortal2.Contract.ProofMaturityDelaySeconds(&_OptimismPortal2.CallOpts) -} - -// ProofMaturityDelaySeconds is a free data retrieval call binding the contract method 0xbf653a5c. -// -// Solidity: function proofMaturityDelaySeconds() view returns(uint256) -func (_OptimismPortal2 *OptimismPortal2CallerSession) ProofMaturityDelaySeconds() (*big.Int, error) { - return _OptimismPortal2.Contract.ProofMaturityDelaySeconds(&_OptimismPortal2.CallOpts) -} - -// ProofSubmitters is a free data retrieval call binding the contract method 0xa3860f48. -// -// Solidity: function proofSubmitters(bytes32 , uint256 ) view returns(address) -func (_OptimismPortal2 *OptimismPortal2Caller) ProofSubmitters(opts *bind.CallOpts, arg0 [32]byte, arg1 *big.Int) (common.Address, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "proofSubmitters", arg0, arg1) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ProofSubmitters is a free data retrieval call binding the contract method 0xa3860f48. -// -// Solidity: function proofSubmitters(bytes32 , uint256 ) view returns(address) -func (_OptimismPortal2 *OptimismPortal2Session) ProofSubmitters(arg0 [32]byte, arg1 *big.Int) (common.Address, error) { - return _OptimismPortal2.Contract.ProofSubmitters(&_OptimismPortal2.CallOpts, arg0, arg1) -} - -// ProofSubmitters is a free data retrieval call binding the contract method 0xa3860f48. -// -// Solidity: function proofSubmitters(bytes32 , uint256 ) view returns(address) -func (_OptimismPortal2 *OptimismPortal2CallerSession) ProofSubmitters(arg0 [32]byte, arg1 *big.Int) (common.Address, error) { - return _OptimismPortal2.Contract.ProofSubmitters(&_OptimismPortal2.CallOpts, arg0, arg1) -} - -// ProvenWithdrawals is a free data retrieval call binding the contract method 0xbb2c727e. -// -// Solidity: function provenWithdrawals(bytes32 , address ) view returns(address disputeGameProxy, uint64 timestamp) -func (_OptimismPortal2 *OptimismPortal2Caller) ProvenWithdrawals(opts *bind.CallOpts, arg0 [32]byte, arg1 common.Address) (struct { - DisputeGameProxy common.Address - Timestamp uint64 -}, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "provenWithdrawals", arg0, arg1) - - outstruct := new(struct { - DisputeGameProxy common.Address - Timestamp uint64 - }) - if err != nil { - return *outstruct, err - } - - outstruct.DisputeGameProxy = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - outstruct.Timestamp = *abi.ConvertType(out[1], new(uint64)).(*uint64) - - return *outstruct, err - -} - -// ProvenWithdrawals is a free data retrieval call binding the contract method 0xbb2c727e. -// -// Solidity: function provenWithdrawals(bytes32 , address ) view returns(address disputeGameProxy, uint64 timestamp) -func (_OptimismPortal2 *OptimismPortal2Session) ProvenWithdrawals(arg0 [32]byte, arg1 common.Address) (struct { - DisputeGameProxy common.Address - Timestamp uint64 -}, error) { - return _OptimismPortal2.Contract.ProvenWithdrawals(&_OptimismPortal2.CallOpts, arg0, arg1) -} - -// ProvenWithdrawals is a free data retrieval call binding the contract method 0xbb2c727e. -// -// Solidity: function provenWithdrawals(bytes32 , address ) view returns(address disputeGameProxy, uint64 timestamp) -func (_OptimismPortal2 *OptimismPortal2CallerSession) ProvenWithdrawals(arg0 [32]byte, arg1 common.Address) (struct { - DisputeGameProxy common.Address - Timestamp uint64 -}, error) { - return _OptimismPortal2.Contract.ProvenWithdrawals(&_OptimismPortal2.CallOpts, arg0, arg1) -} - -// RespectedGameType is a free data retrieval call binding the contract method 0x3c9f397c. -// -// Solidity: function respectedGameType() view returns(uint32) -func (_OptimismPortal2 *OptimismPortal2Caller) RespectedGameType(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "respectedGameType") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// RespectedGameType is a free data retrieval call binding the contract method 0x3c9f397c. -// -// Solidity: function respectedGameType() view returns(uint32) -func (_OptimismPortal2 *OptimismPortal2Session) RespectedGameType() (uint32, error) { - return _OptimismPortal2.Contract.RespectedGameType(&_OptimismPortal2.CallOpts) -} - -// RespectedGameType is a free data retrieval call binding the contract method 0x3c9f397c. -// -// Solidity: function respectedGameType() view returns(uint32) -func (_OptimismPortal2 *OptimismPortal2CallerSession) RespectedGameType() (uint32, error) { - return _OptimismPortal2.Contract.RespectedGameType(&_OptimismPortal2.CallOpts) -} - -// RespectedGameTypeUpdatedAt is a free data retrieval call binding the contract method 0x4fd0434c. -// -// Solidity: function respectedGameTypeUpdatedAt() view returns(uint64) -func (_OptimismPortal2 *OptimismPortal2Caller) RespectedGameTypeUpdatedAt(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "respectedGameTypeUpdatedAt") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// RespectedGameTypeUpdatedAt is a free data retrieval call binding the contract method 0x4fd0434c. -// -// Solidity: function respectedGameTypeUpdatedAt() view returns(uint64) -func (_OptimismPortal2 *OptimismPortal2Session) RespectedGameTypeUpdatedAt() (uint64, error) { - return _OptimismPortal2.Contract.RespectedGameTypeUpdatedAt(&_OptimismPortal2.CallOpts) -} - -// RespectedGameTypeUpdatedAt is a free data retrieval call binding the contract method 0x4fd0434c. -// -// Solidity: function respectedGameTypeUpdatedAt() view returns(uint64) -func (_OptimismPortal2 *OptimismPortal2CallerSession) RespectedGameTypeUpdatedAt() (uint64, error) { - return _OptimismPortal2.Contract.RespectedGameTypeUpdatedAt(&_OptimismPortal2.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_OptimismPortal2 *OptimismPortal2Caller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_OptimismPortal2 *OptimismPortal2Session) SuperchainConfig() (common.Address, error) { - return _OptimismPortal2.Contract.SuperchainConfig(&_OptimismPortal2.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_OptimismPortal2 *OptimismPortal2CallerSession) SuperchainConfig() (common.Address, error) { - return _OptimismPortal2.Contract.SuperchainConfig(&_OptimismPortal2.CallOpts) -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_OptimismPortal2 *OptimismPortal2Caller) SystemConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "systemConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_OptimismPortal2 *OptimismPortal2Session) SystemConfig() (common.Address, error) { - return _OptimismPortal2.Contract.SystemConfig(&_OptimismPortal2.CallOpts) -} - -// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. -// -// Solidity: function systemConfig() view returns(address) -func (_OptimismPortal2 *OptimismPortal2CallerSession) SystemConfig() (common.Address, error) { - return _OptimismPortal2.Contract.SystemConfig(&_OptimismPortal2.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismPortal2 *OptimismPortal2Caller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _OptimismPortal2.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismPortal2 *OptimismPortal2Session) Version() (string, error) { - return _OptimismPortal2.Contract.Version(&_OptimismPortal2.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OptimismPortal2 *OptimismPortal2CallerSession) Version() (string, error) { - return _OptimismPortal2.Contract.Version(&_OptimismPortal2.CallOpts) -} - -// BlacklistDisputeGame is a paid mutator transaction binding the contract method 0x7d6be8dc. -// -// Solidity: function blacklistDisputeGame(address _disputeGame) returns() -func (_OptimismPortal2 *OptimismPortal2Transactor) BlacklistDisputeGame(opts *bind.TransactOpts, _disputeGame common.Address) (*types.Transaction, error) { - return _OptimismPortal2.contract.Transact(opts, "blacklistDisputeGame", _disputeGame) -} - -// BlacklistDisputeGame is a paid mutator transaction binding the contract method 0x7d6be8dc. -// -// Solidity: function blacklistDisputeGame(address _disputeGame) returns() -func (_OptimismPortal2 *OptimismPortal2Session) BlacklistDisputeGame(_disputeGame common.Address) (*types.Transaction, error) { - return _OptimismPortal2.Contract.BlacklistDisputeGame(&_OptimismPortal2.TransactOpts, _disputeGame) -} - -// BlacklistDisputeGame is a paid mutator transaction binding the contract method 0x7d6be8dc. -// -// Solidity: function blacklistDisputeGame(address _disputeGame) returns() -func (_OptimismPortal2 *OptimismPortal2TransactorSession) BlacklistDisputeGame(_disputeGame common.Address) (*types.Transaction, error) { - return _OptimismPortal2.Contract.BlacklistDisputeGame(&_OptimismPortal2.TransactOpts, _disputeGame) -} - -// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. -// -// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() -func (_OptimismPortal2 *OptimismPortal2Transactor) DepositTransaction(opts *bind.TransactOpts, _to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal2.contract.Transact(opts, "depositTransaction", _to, _value, _gasLimit, _isCreation, _data) -} - -// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. -// -// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() -func (_OptimismPortal2 *OptimismPortal2Session) DepositTransaction(_to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal2.Contract.DepositTransaction(&_OptimismPortal2.TransactOpts, _to, _value, _gasLimit, _isCreation, _data) -} - -// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. -// -// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() -func (_OptimismPortal2 *OptimismPortal2TransactorSession) DepositTransaction(_to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { - return _OptimismPortal2.Contract.DepositTransaction(&_OptimismPortal2.TransactOpts, _to, _value, _gasLimit, _isCreation, _data) -} - -// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. -// -// Solidity: function donateETH() payable returns() -func (_OptimismPortal2 *OptimismPortal2Transactor) DonateETH(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal2.contract.Transact(opts, "donateETH") -} - -// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. -// -// Solidity: function donateETH() payable returns() -func (_OptimismPortal2 *OptimismPortal2Session) DonateETH() (*types.Transaction, error) { - return _OptimismPortal2.Contract.DonateETH(&_OptimismPortal2.TransactOpts) -} - -// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. -// -// Solidity: function donateETH() payable returns() -func (_OptimismPortal2 *OptimismPortal2TransactorSession) DonateETH() (*types.Transaction, error) { - return _OptimismPortal2.Contract.DonateETH(&_OptimismPortal2.TransactOpts) -} - -// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. -// -// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() -func (_OptimismPortal2 *OptimismPortal2Transactor) FinalizeWithdrawalTransaction(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction) (*types.Transaction, error) { - return _OptimismPortal2.contract.Transact(opts, "finalizeWithdrawalTransaction", _tx) -} - -// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. -// -// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() -func (_OptimismPortal2 *OptimismPortal2Session) FinalizeWithdrawalTransaction(_tx TypesWithdrawalTransaction) (*types.Transaction, error) { - return _OptimismPortal2.Contract.FinalizeWithdrawalTransaction(&_OptimismPortal2.TransactOpts, _tx) -} - -// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. -// -// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() -func (_OptimismPortal2 *OptimismPortal2TransactorSession) FinalizeWithdrawalTransaction(_tx TypesWithdrawalTransaction) (*types.Transaction, error) { - return _OptimismPortal2.Contract.FinalizeWithdrawalTransaction(&_OptimismPortal2.TransactOpts, _tx) -} - -// FinalizeWithdrawalTransactionExternalProof is a paid mutator transaction binding the contract method 0x43ca1c50. -// -// Solidity: function finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes) _tx, address _proofSubmitter) returns() -func (_OptimismPortal2 *OptimismPortal2Transactor) FinalizeWithdrawalTransactionExternalProof(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction, _proofSubmitter common.Address) (*types.Transaction, error) { - return _OptimismPortal2.contract.Transact(opts, "finalizeWithdrawalTransactionExternalProof", _tx, _proofSubmitter) -} - -// FinalizeWithdrawalTransactionExternalProof is a paid mutator transaction binding the contract method 0x43ca1c50. -// -// Solidity: function finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes) _tx, address _proofSubmitter) returns() -func (_OptimismPortal2 *OptimismPortal2Session) FinalizeWithdrawalTransactionExternalProof(_tx TypesWithdrawalTransaction, _proofSubmitter common.Address) (*types.Transaction, error) { - return _OptimismPortal2.Contract.FinalizeWithdrawalTransactionExternalProof(&_OptimismPortal2.TransactOpts, _tx, _proofSubmitter) -} - -// FinalizeWithdrawalTransactionExternalProof is a paid mutator transaction binding the contract method 0x43ca1c50. -// -// Solidity: function finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes) _tx, address _proofSubmitter) returns() -func (_OptimismPortal2 *OptimismPortal2TransactorSession) FinalizeWithdrawalTransactionExternalProof(_tx TypesWithdrawalTransaction, _proofSubmitter common.Address) (*types.Transaction, error) { - return _OptimismPortal2.Contract.FinalizeWithdrawalTransactionExternalProof(&_OptimismPortal2.TransactOpts, _tx, _proofSubmitter) -} - -// Initialize is a paid mutator transaction binding the contract method 0x8e819e54. -// -// Solidity: function initialize(address _disputeGameFactory, address _systemConfig, address _superchainConfig, uint32 _initialRespectedGameType) returns() -func (_OptimismPortal2 *OptimismPortal2Transactor) Initialize(opts *bind.TransactOpts, _disputeGameFactory common.Address, _systemConfig common.Address, _superchainConfig common.Address, _initialRespectedGameType uint32) (*types.Transaction, error) { - return _OptimismPortal2.contract.Transact(opts, "initialize", _disputeGameFactory, _systemConfig, _superchainConfig, _initialRespectedGameType) -} - -// Initialize is a paid mutator transaction binding the contract method 0x8e819e54. -// -// Solidity: function initialize(address _disputeGameFactory, address _systemConfig, address _superchainConfig, uint32 _initialRespectedGameType) returns() -func (_OptimismPortal2 *OptimismPortal2Session) Initialize(_disputeGameFactory common.Address, _systemConfig common.Address, _superchainConfig common.Address, _initialRespectedGameType uint32) (*types.Transaction, error) { - return _OptimismPortal2.Contract.Initialize(&_OptimismPortal2.TransactOpts, _disputeGameFactory, _systemConfig, _superchainConfig, _initialRespectedGameType) -} - -// Initialize is a paid mutator transaction binding the contract method 0x8e819e54. -// -// Solidity: function initialize(address _disputeGameFactory, address _systemConfig, address _superchainConfig, uint32 _initialRespectedGameType) returns() -func (_OptimismPortal2 *OptimismPortal2TransactorSession) Initialize(_disputeGameFactory common.Address, _systemConfig common.Address, _superchainConfig common.Address, _initialRespectedGameType uint32) (*types.Transaction, error) { - return _OptimismPortal2.Contract.Initialize(&_OptimismPortal2.TransactOpts, _disputeGameFactory, _systemConfig, _superchainConfig, _initialRespectedGameType) -} - -// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. -// -// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _disputeGameIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() -func (_OptimismPortal2 *OptimismPortal2Transactor) ProveWithdrawalTransaction(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction, _disputeGameIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { - return _OptimismPortal2.contract.Transact(opts, "proveWithdrawalTransaction", _tx, _disputeGameIndex, _outputRootProof, _withdrawalProof) -} - -// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. -// -// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _disputeGameIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() -func (_OptimismPortal2 *OptimismPortal2Session) ProveWithdrawalTransaction(_tx TypesWithdrawalTransaction, _disputeGameIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { - return _OptimismPortal2.Contract.ProveWithdrawalTransaction(&_OptimismPortal2.TransactOpts, _tx, _disputeGameIndex, _outputRootProof, _withdrawalProof) -} - -// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. -// -// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _disputeGameIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() -func (_OptimismPortal2 *OptimismPortal2TransactorSession) ProveWithdrawalTransaction(_tx TypesWithdrawalTransaction, _disputeGameIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { - return _OptimismPortal2.Contract.ProveWithdrawalTransaction(&_OptimismPortal2.TransactOpts, _tx, _disputeGameIndex, _outputRootProof, _withdrawalProof) -} - -// SetRespectedGameType is a paid mutator transaction binding the contract method 0x7fc48504. -// -// Solidity: function setRespectedGameType(uint32 _gameType) returns() -func (_OptimismPortal2 *OptimismPortal2Transactor) SetRespectedGameType(opts *bind.TransactOpts, _gameType uint32) (*types.Transaction, error) { - return _OptimismPortal2.contract.Transact(opts, "setRespectedGameType", _gameType) -} - -// SetRespectedGameType is a paid mutator transaction binding the contract method 0x7fc48504. -// -// Solidity: function setRespectedGameType(uint32 _gameType) returns() -func (_OptimismPortal2 *OptimismPortal2Session) SetRespectedGameType(_gameType uint32) (*types.Transaction, error) { - return _OptimismPortal2.Contract.SetRespectedGameType(&_OptimismPortal2.TransactOpts, _gameType) -} - -// SetRespectedGameType is a paid mutator transaction binding the contract method 0x7fc48504. -// -// Solidity: function setRespectedGameType(uint32 _gameType) returns() -func (_OptimismPortal2 *OptimismPortal2TransactorSession) SetRespectedGameType(_gameType uint32) (*types.Transaction, error) { - return _OptimismPortal2.Contract.SetRespectedGameType(&_OptimismPortal2.TransactOpts, _gameType) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_OptimismPortal2 *OptimismPortal2Transactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { - return _OptimismPortal2.contract.RawTransact(opts, nil) // calldata is disallowed for receive function -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_OptimismPortal2 *OptimismPortal2Session) Receive() (*types.Transaction, error) { - return _OptimismPortal2.Contract.Receive(&_OptimismPortal2.TransactOpts) -} - -// Receive is a paid mutator transaction binding the contract receive function. -// -// Solidity: receive() payable returns() -func (_OptimismPortal2 *OptimismPortal2TransactorSession) Receive() (*types.Transaction, error) { - return _OptimismPortal2.Contract.Receive(&_OptimismPortal2.TransactOpts) -} - -// OptimismPortal2InitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the OptimismPortal2 contract. -type OptimismPortal2InitializedIterator struct { - Event *OptimismPortal2Initialized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortal2InitializedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortal2Initialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortal2Initialized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortal2InitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortal2InitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortal2Initialized represents a Initialized event raised by the OptimismPortal2 contract. -type OptimismPortal2Initialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismPortal2 *OptimismPortal2Filterer) FilterInitialized(opts *bind.FilterOpts) (*OptimismPortal2InitializedIterator, error) { - - logs, sub, err := _OptimismPortal2.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &OptimismPortal2InitializedIterator{contract: _OptimismPortal2.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismPortal2 *OptimismPortal2Filterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *OptimismPortal2Initialized) (event.Subscription, error) { - - logs, sub, err := _OptimismPortal2.contract.WatchLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortal2Initialized) - if err := _OptimismPortal2.contract.UnpackLog(event, "Initialized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_OptimismPortal2 *OptimismPortal2Filterer) ParseInitialized(log types.Log) (*OptimismPortal2Initialized, error) { - event := new(OptimismPortal2Initialized) - if err := _OptimismPortal2.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismPortal2TransactionDepositedIterator is returned from FilterTransactionDeposited and is used to iterate over the raw logs and unpacked data for TransactionDeposited events raised by the OptimismPortal2 contract. -type OptimismPortal2TransactionDepositedIterator struct { - Event *OptimismPortal2TransactionDeposited // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortal2TransactionDepositedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortal2TransactionDeposited) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortal2TransactionDeposited) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortal2TransactionDepositedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortal2TransactionDepositedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortal2TransactionDeposited represents a TransactionDeposited event raised by the OptimismPortal2 contract. -type OptimismPortal2TransactionDeposited struct { - From common.Address - To common.Address - Version *big.Int - OpaqueData []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterTransactionDeposited is a free log retrieval operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. -// -// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) -func (_OptimismPortal2 *OptimismPortal2Filterer) FilterTransactionDeposited(opts *bind.FilterOpts, from []common.Address, to []common.Address, version []*big.Int) (*OptimismPortal2TransactionDepositedIterator, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - - logs, sub, err := _OptimismPortal2.contract.FilterLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule) - if err != nil { - return nil, err - } - return &OptimismPortal2TransactionDepositedIterator{contract: _OptimismPortal2.contract, event: "TransactionDeposited", logs: logs, sub: sub}, nil -} - -// WatchTransactionDeposited is a free log subscription operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. -// -// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) -func (_OptimismPortal2 *OptimismPortal2Filterer) WatchTransactionDeposited(opts *bind.WatchOpts, sink chan<- *OptimismPortal2TransactionDeposited, from []common.Address, to []common.Address, version []*big.Int) (event.Subscription, error) { - - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - - logs, sub, err := _OptimismPortal2.contract.WatchLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortal2TransactionDeposited) - if err := _OptimismPortal2.contract.UnpackLog(event, "TransactionDeposited", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseTransactionDeposited is a log parse operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. -// -// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) -func (_OptimismPortal2 *OptimismPortal2Filterer) ParseTransactionDeposited(log types.Log) (*OptimismPortal2TransactionDeposited, error) { - event := new(OptimismPortal2TransactionDeposited) - if err := _OptimismPortal2.contract.UnpackLog(event, "TransactionDeposited", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismPortal2WithdrawalFinalizedIterator is returned from FilterWithdrawalFinalized and is used to iterate over the raw logs and unpacked data for WithdrawalFinalized events raised by the OptimismPortal2 contract. -type OptimismPortal2WithdrawalFinalizedIterator struct { - Event *OptimismPortal2WithdrawalFinalized // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortal2WithdrawalFinalizedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortal2WithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortal2WithdrawalFinalized) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortal2WithdrawalFinalizedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortal2WithdrawalFinalizedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortal2WithdrawalFinalized represents a WithdrawalFinalized event raised by the OptimismPortal2 contract. -type OptimismPortal2WithdrawalFinalized struct { - WithdrawalHash [32]byte - Success bool - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawalFinalized is a free log retrieval operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. -// -// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) -func (_OptimismPortal2 *OptimismPortal2Filterer) FilterWithdrawalFinalized(opts *bind.FilterOpts, withdrawalHash [][32]byte) (*OptimismPortal2WithdrawalFinalizedIterator, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - - logs, sub, err := _OptimismPortal2.contract.FilterLogs(opts, "WithdrawalFinalized", withdrawalHashRule) - if err != nil { - return nil, err - } - return &OptimismPortal2WithdrawalFinalizedIterator{contract: _OptimismPortal2.contract, event: "WithdrawalFinalized", logs: logs, sub: sub}, nil -} - -// WatchWithdrawalFinalized is a free log subscription operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. -// -// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) -func (_OptimismPortal2 *OptimismPortal2Filterer) WatchWithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *OptimismPortal2WithdrawalFinalized, withdrawalHash [][32]byte) (event.Subscription, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - - logs, sub, err := _OptimismPortal2.contract.WatchLogs(opts, "WithdrawalFinalized", withdrawalHashRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortal2WithdrawalFinalized) - if err := _OptimismPortal2.contract.UnpackLog(event, "WithdrawalFinalized", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseWithdrawalFinalized is a log parse operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. -// -// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) -func (_OptimismPortal2 *OptimismPortal2Filterer) ParseWithdrawalFinalized(log types.Log) (*OptimismPortal2WithdrawalFinalized, error) { - event := new(OptimismPortal2WithdrawalFinalized) - if err := _OptimismPortal2.contract.UnpackLog(event, "WithdrawalFinalized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// OptimismPortal2WithdrawalProvenIterator is returned from FilterWithdrawalProven and is used to iterate over the raw logs and unpacked data for WithdrawalProven events raised by the OptimismPortal2 contract. -type OptimismPortal2WithdrawalProvenIterator struct { - Event *OptimismPortal2WithdrawalProven // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// Next advances the iterator to the subsequent event, returning whether there -// are any more events found. In case of a retrieval or parsing error, false is -// returned and Error() can be queried for the exact failure. -func (it *OptimismPortal2WithdrawalProvenIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(OptimismPortal2WithdrawalProven) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(OptimismPortal2WithdrawalProven) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *OptimismPortal2WithdrawalProvenIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *OptimismPortal2WithdrawalProvenIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// OptimismPortal2WithdrawalProven represents a WithdrawalProven event raised by the OptimismPortal2 contract. -type OptimismPortal2WithdrawalProven struct { - WithdrawalHash [32]byte - From common.Address - To common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterWithdrawalProven is a free log retrieval operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. -// -// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) -func (_OptimismPortal2 *OptimismPortal2Filterer) FilterWithdrawalProven(opts *bind.FilterOpts, withdrawalHash [][32]byte, from []common.Address, to []common.Address) (*OptimismPortal2WithdrawalProvenIterator, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _OptimismPortal2.contract.FilterLogs(opts, "WithdrawalProven", withdrawalHashRule, fromRule, toRule) - if err != nil { - return nil, err - } - return &OptimismPortal2WithdrawalProvenIterator{contract: _OptimismPortal2.contract, event: "WithdrawalProven", logs: logs, sub: sub}, nil -} - -// WatchWithdrawalProven is a free log subscription operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. -// -// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) -func (_OptimismPortal2 *OptimismPortal2Filterer) WatchWithdrawalProven(opts *bind.WatchOpts, sink chan<- *OptimismPortal2WithdrawalProven, withdrawalHash [][32]byte, from []common.Address, to []common.Address) (event.Subscription, error) { - - var withdrawalHashRule []interface{} - for _, withdrawalHashItem := range withdrawalHash { - withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) - } - var fromRule []interface{} - for _, fromItem := range from { - fromRule = append(fromRule, fromItem) - } - var toRule []interface{} - for _, toItem := range to { - toRule = append(toRule, toItem) - } - - logs, sub, err := _OptimismPortal2.contract.WatchLogs(opts, "WithdrawalProven", withdrawalHashRule, fromRule, toRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(OptimismPortal2WithdrawalProven) - if err := _OptimismPortal2.contract.UnpackLog(event, "WithdrawalProven", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseWithdrawalProven is a log parse operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. -// -// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) -func (_OptimismPortal2 *OptimismPortal2Filterer) ParseWithdrawalProven(log types.Log) (*OptimismPortal2WithdrawalProven, error) { - event := new(OptimismPortal2WithdrawalProven) - if err := _OptimismPortal2.contract.UnpackLog(event, "WithdrawalProven", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-bindings/bindingspreview/optimismportal2_more.go b/op-bindings/bindingspreview/optimismportal2_more.go deleted file mode 100644 index 52b703e7f3c..00000000000 --- a/op-bindings/bindingspreview/optimismportal2_more.go +++ /dev/null @@ -1,27 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindingspreview - -import ( - "encoding/json" - - "github.com/ethereum-optimism/optimism/op-bindings/solc" -) - -const OptimismPortal2StorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"_initialized\",\"offset\":0,\"slot\":\"0\",\"type\":\"t_uint8\"},{\"astId\":1001,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"_initializing\",\"offset\":1,\"slot\":\"0\",\"type\":\"t_bool\"},{\"astId\":1002,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"params\",\"offset\":0,\"slot\":\"1\",\"type\":\"t_struct(ResourceParams)1023_storage\"},{\"astId\":1003,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"__gap\",\"offset\":0,\"slot\":\"2\",\"type\":\"t_array(t_uint256)48_storage\"},{\"astId\":1004,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"l2Sender\",\"offset\":0,\"slot\":\"50\",\"type\":\"t_address\"},{\"astId\":1005,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"finalizedWithdrawals\",\"offset\":0,\"slot\":\"51\",\"type\":\"t_mapping(t_bytes32,t_bool)\"},{\"astId\":1006,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"spacer_52_0_32\",\"offset\":0,\"slot\":\"52\",\"type\":\"t_bytes32\"},{\"astId\":1007,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"spacer_53_0_1\",\"offset\":0,\"slot\":\"53\",\"type\":\"t_bool\"},{\"astId\":1008,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"superchainConfig\",\"offset\":1,\"slot\":\"53\",\"type\":\"t_contract(SuperchainConfig)1020\"},{\"astId\":1009,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"spacer_54_0_20\",\"offset\":0,\"slot\":\"54\",\"type\":\"t_address\"},{\"astId\":1010,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"systemConfig\",\"offset\":0,\"slot\":\"55\",\"type\":\"t_contract(SystemConfig)1021\"},{\"astId\":1011,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"disputeGameFactory\",\"offset\":0,\"slot\":\"56\",\"type\":\"t_contract(DisputeGameFactory)1018\"},{\"astId\":1012,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"provenWithdrawals\",\"offset\":0,\"slot\":\"57\",\"type\":\"t_mapping(t_bytes32,t_mapping(t_address,t_struct(ProvenWithdrawal)1022_storage))\"},{\"astId\":1013,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"disputeGameBlacklist\",\"offset\":0,\"slot\":\"58\",\"type\":\"t_mapping(t_contract(IDisputeGame)1019,t_bool)\"},{\"astId\":1014,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"respectedGameType\",\"offset\":0,\"slot\":\"59\",\"type\":\"t_userDefinedValueType(GameType)1024\"},{\"astId\":1015,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"respectedGameTypeUpdatedAt\",\"offset\":4,\"slot\":\"59\",\"type\":\"t_uint64\"},{\"astId\":1016,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"proofSubmitters\",\"offset\":0,\"slot\":\"60\",\"type\":\"t_mapping(t_bytes32,t_array(t_address)dyn_storage)\"},{\"astId\":1017,\"contract\":\"src/L1/OptimismPortal2.sol:OptimismPortal2\",\"label\":\"spacer_61_0_32\",\"offset\":0,\"slot\":\"61\",\"type\":\"t_bytes32\"}],\"types\":{\"t_address\":{\"encoding\":\"inplace\",\"label\":\"address\",\"numberOfBytes\":\"20\"},\"t_array(t_address)dyn_storage\":{\"encoding\":\"dynamic_array\",\"label\":\"address[]\",\"numberOfBytes\":\"32\",\"base\":\"t_address\"},\"t_array(t_uint256)48_storage\":{\"encoding\":\"inplace\",\"label\":\"uint256[48]\",\"numberOfBytes\":\"1536\",\"base\":\"t_uint256\"},\"t_bool\":{\"encoding\":\"inplace\",\"label\":\"bool\",\"numberOfBytes\":\"1\"},\"t_bytes32\":{\"encoding\":\"inplace\",\"label\":\"bytes32\",\"numberOfBytes\":\"32\"},\"t_contract(DisputeGameFactory)1018\":{\"encoding\":\"inplace\",\"label\":\"contract DisputeGameFactory\",\"numberOfBytes\":\"20\"},\"t_contract(IDisputeGame)1019\":{\"encoding\":\"inplace\",\"label\":\"contract IDisputeGame\",\"numberOfBytes\":\"20\"},\"t_contract(SuperchainConfig)1020\":{\"encoding\":\"inplace\",\"label\":\"contract SuperchainConfig\",\"numberOfBytes\":\"20\"},\"t_contract(SystemConfig)1021\":{\"encoding\":\"inplace\",\"label\":\"contract SystemConfig\",\"numberOfBytes\":\"20\"},\"t_mapping(t_address,t_struct(ProvenWithdrawal)1022_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(address =\u003e struct OptimismPortal2.ProvenWithdrawal)\",\"numberOfBytes\":\"32\",\"key\":\"t_address\",\"value\":\"t_struct(ProvenWithdrawal)1022_storage\"},\"t_mapping(t_bytes32,t_array(t_address)dyn_storage)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e address[])\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_array(t_address)dyn_storage\"},\"t_mapping(t_bytes32,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_bool\"},\"t_mapping(t_bytes32,t_mapping(t_address,t_struct(ProvenWithdrawal)1022_storage))\":{\"encoding\":\"mapping\",\"label\":\"mapping(bytes32 =\u003e mapping(address =\u003e struct OptimismPortal2.ProvenWithdrawal))\",\"numberOfBytes\":\"32\",\"key\":\"t_bytes32\",\"value\":\"t_mapping(t_address,t_struct(ProvenWithdrawal)1022_storage)\"},\"t_mapping(t_contract(IDisputeGame)1019,t_bool)\":{\"encoding\":\"mapping\",\"label\":\"mapping(contract IDisputeGame =\u003e bool)\",\"numberOfBytes\":\"32\",\"key\":\"t_contract(IDisputeGame)1019\",\"value\":\"t_bool\"},\"t_struct(ProvenWithdrawal)1022_storage\":{\"encoding\":\"inplace\",\"label\":\"struct OptimismPortal2.ProvenWithdrawal\",\"numberOfBytes\":\"32\"},\"t_struct(ResourceParams)1023_storage\":{\"encoding\":\"inplace\",\"label\":\"struct ResourceMetering.ResourceParams\",\"numberOfBytes\":\"32\"},\"t_uint128\":{\"encoding\":\"inplace\",\"label\":\"uint128\",\"numberOfBytes\":\"16\"},\"t_uint256\":{\"encoding\":\"inplace\",\"label\":\"uint256\",\"numberOfBytes\":\"32\"},\"t_uint64\":{\"encoding\":\"inplace\",\"label\":\"uint64\",\"numberOfBytes\":\"8\"},\"t_uint8\":{\"encoding\":\"inplace\",\"label\":\"uint8\",\"numberOfBytes\":\"1\"},\"t_userDefinedValueType(GameType)1024\":{\"encoding\":\"inplace\",\"label\":\"GameType\",\"numberOfBytes\":\"4\"}}}" - -var OptimismPortal2StorageLayout = new(solc.StorageLayout) - -var OptimismPortal2DeployedBin = "0x6080604052600436106101b05760003560e01c80637fc48504116100ec578063a35d99df1161008a578063bf653a5c11610064578063bf653a5c1461062b578063cff0ab961461065e578063e9e05c42146106ff578063f2b4e6171461071257600080fd5b8063a35d99df14610544578063a3860f4814610564578063bb2c727e1461058457600080fd5b80638e819e54116100c65780638e819e5414610494578063952b2797146104b45780639bf62d82146104e7578063a14238e71461051457600080fd5b80637fc48504146104545780638b4c40b0146101d55780638c3152e91461047457600080fd5b80634870496f1161015957806354fd4d501161013357806354fd4d50146103a95780635c975abb146103ff57806371c1566e146104145780637d6be8dc1461043457600080fd5b80634870496f1461030c5780634fd0434c1461032c578063513747ab1461036e57600080fd5b806343ca1c501161018a57806343ca1c5014610297578063452a9320146102b757806345884d32146102cc57600080fd5b806333d7e2bd146101dc57806335e80ab3146102335780633c9f397c1461026557600080fd5b366101d7576101d53334620186a060006040518060200160405280600081525061073f565b005b600080fd5b3480156101e857600080fd5b506037546102099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023f57600080fd5b5060355461020990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561027157600080fd5b50603b546102829063ffffffff1681565b60405163ffffffff909116815260200161022a565b3480156102a357600080fd5b506101d56102b2366004614e15565b6108fc565b3480156102c357600080fd5b50610209610b5a565b3480156102d857600080fd5b506102fc6102e7366004614e67565b603a6020526000908152604090205460ff1681565b604051901515815260200161022a565b34801561031857600080fd5b506101d5610327366004614e84565b610bf2565b34801561033857600080fd5b50603b5461035590640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161022a565b34801561037a57600080fd5b5061039b610389366004614f60565b6000908152603c602052604090205490565b60405190815260200161022a565b3480156103b557600080fd5b506103f26040518060400160405280600581526020017f332e382e3000000000000000000000000000000000000000000000000000000081525081565b60405161022a9190614fef565b34801561040b57600080fd5b506102fc6112d6565b34801561042057600080fd5b506101d561042f366004615002565b611369565b34801561044057600080fd5b506101d561044f366004614e67565b611bfa565b34801561046057600080fd5b506101d561046f366004615039565b611cb5565b34801561048057600080fd5b506101d561048f366004615056565b611d6f565b3480156104a057600080fd5b506101d56104af366004615093565b611dbb565b3480156104c057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b3480156104f357600080fd5b506032546102099073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052057600080fd5b506102fc61052f366004614f60565b60336020526000908152604090205460ff1681565b34801561055057600080fd5b5061035561055f366004615105565b612070565b34801561057057600080fd5b5061020961057f366004615122565b61208f565b34801561059057600080fd5b506105f661059f366004615002565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161022a565b34801561063757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b34801561066a57600080fd5b506001546106c6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161022a565b6101d561070d366004615152565b61073f565b34801561071e57600080fd5b506038546102099073ffffffffffffffffffffffffffffffffffffffff1681565b8260005a9050838015610767575073ffffffffffffffffffffffffffffffffffffffff871615155b1561079e576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107a88351612070565b67ffffffffffffffff168567ffffffffffffffff1610156107f5576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c083511115610833576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33328114610854575033731111000000000000000000000000000000001111015b6000348888888860405160200161086f9594939291906151d1565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516108df9190614fef565b60405180910390a450506108f382826120f0565b50505050505050565b6109046112d6565b1561093b576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084015b60405180910390fd5b60006109f4836123c7565b9050610a008183611369565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558401516080850151606086015160a0870151610aa293929190612414565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610b0790841515815260200190565b60405180910390a280158015610b1d5750326001145b15610b54576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190615236565b905090565b610bfa6112d6565b15610c31576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016109e0565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190615253565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe91906152a0565b603b5490915063ffffffff848116911614610e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b610eb2610ead368890038801886152b9565b612472565b8114610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016109e0565b6000610f4b896123c7565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe919061534e565b6002811115610fcf57610fcf61531f565b0361105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d657300000000000060648201526084016109e0565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506111259101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f010000000000000000000000000000000000000000000000000000000000000060208301529061111b898b61536f565b8b604001356124b1565b6111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016109e0565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906153f3565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c697374656400000000000000000000000000000060648201526084016109e0565b816020015167ffffffffffffffff16600003611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a4016109e0565b60006115b38273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a69190615410565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff1611611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426116bd919061545c565b1161174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d61747572656420796574000000000000000000000060648201526084016109e0565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb919061534e565b60028111156117cc576117cc61531f565b14611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c6964617465640000000000000000000060648201526084016109e0565b603b5463ffffffff1663ffffffff166118e38373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118da9190615473565b63ffffffff1690565b63ffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b603b5467ffffffffffffffff64010000000090910481169082161015611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000611ab38373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b611ac79067ffffffffffffffff164261545c565b11611b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d6761700000000000000000000000000000000000000000000060648201526084016109e0565b60008581526033602052604090205460ff1615611bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016109e0565b5050505050565b611c02610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152603a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611cbd610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff929092167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909216919091176401000000004267ffffffffffffffff1602179055565b565b611d776112d6565b15611dae576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db881336108fc565b50565b600054610100900460ff1615808015611ddb5750600054600160ff909116105b80611df55750303b158015611df5575060005460ff166001145b611e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109e0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611edf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008684160217905560325416611fff576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b6120076124d5565b8015611bf357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600061207d826010615490565b612089906152086154c0565b92915050565b603c60205281600052604060002081815481106120ab57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090612126907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361545c565b905060006121326125e8565b90506000816020015160ff16826000015163ffffffff16612153919061551b565b9050821561228a5760015460009061218a908390700100000000000000000000000000000000900467ffffffffffffffff16615583565b90506000836040015160ff16836121a191906155f7565b6001546121c19084906fffffffffffffffffffffffffffffffff166155f7565b6121cb919061551b565b60015490915060009061221c906121f59084906fffffffffffffffffffffffffffffffff166156b3565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166126a9565b9050600186111561224b576122486121f582876040015160ff1660018a612243919061545c565b6126c8565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906122bd908490700100000000000000000000000000000000900467ffffffffffffffff166154c0565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561234a576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612376906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615727565b9050600061238848633b9aca0061271d565b6123929083615764565b905060005a6123a1908861545c565b9050808211156123bd576123bd6123b8828461545c565b612734565b5050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976123f7979096959101615778565b604051602081830303815290604052805190602001209050919050565b6000806000612424866000612762565b90508061245a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600081600001518260200151836040015184606001516040516020016123f7949392919093845260208401929092526040830152606082015260800190565b6000806124bd86612780565b90506124cb818686866127b2565b9695505050505050565b600054610100900460ff1661256c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109e0565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611d6d5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612685573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906157e5565b60006126be6126b885856127e2565b836127f2565b90505b9392505050565b6000670de0b6b3a76400006127096126e0858361551b565b6126f290670de0b6b3a7640000615583565b61270485670de0b6b3a76400006155f7565b612801565b61271390866155f7565b6126be919061551b565b60008183101561272d57816126c1565b5090919050565b6000805a90505b825a612747908361545c565b101561275d57612756826158a1565b915061273b565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161279c91815260200190565b6040516020818303038152906040529050919050565b60006127d9846127c3878686612832565b8051602091820120825192909101919091201490565b95945050505050565b60008183121561272d57816126c1565b600081831261272d57816126c1565b60006126c1670de0b6b3a764000083612819866132b0565b61282391906155f7565b61282d919061551b565b6134f4565b6060600084511161289f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016109e0565b60006128aa84613733565b905060006128b78661381f565b90506000846040516020016128ce91815260200190565b60405160208183030381529060405290506000805b8451811015613227576000858281518110612900576129006158d9565b60200260200101519050845183111561299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016109e0565b82600003612a5457805180516020918201206040516129e9926129c392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016109e0565b612bab565b805151602011612b0a5780518051602091820120604051612a7e926129c392910190815260200190565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016109e0565b805184516020808701919091208251919092012014612bab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016109e0565b612bb760106001615908565b81602001515103612d935784518303612d2b57612bf18160200151601081518110612be457612be46158d9565b6020026020010151613882565b96506000875111612c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016109e0565b60018651612c92919061545c565b8214612d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016109e0565b5050505050506126c1565b6000858481518110612d3f57612d3f6158d9565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612d6a57612d6a6158d9565b60200260200101519050612d7d816139e2565b9550612d8a600186615908565b94505050613214565b60028160200151510361318c576000612dab82613a07565b9050600081600081518110612dc257612dc26158d9565b016020015160f81c90506000612dd9600283615920565b612de4906002615942565b90506000612df5848360ff16613a2b565b90506000612e038a89613a2b565b90506000612e118383613a61565b905080835114612ea3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016109e0565b60ff851660021480612eb8575060ff85166003145b156130a75780825114612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016109e0565b612f678760200151600181518110612be457612be46158d9565b9c5060008d5111612ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016109e0565b60018c51613008919061545c565b8814613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016109e0565b5050505050505050505050506126c1565b60ff851615806130ba575060ff85166001145b156130f9576130e687602001516001815181106130d9576130d96158d9565b60200260200101516139e2565b99506130f2818a615908565b9850613181565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016109e0565b505050505050613214565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016109e0565b508061321f816158a1565b9150506128e3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016109e0565b600080821361331b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b6000606061332884613b15565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361352557506000919050565b680755bf798b4a1bf1e58212613597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016109e0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561375157613751614c38565b60405190808252806020026020018201604052801561379657816020015b604080518082019091526060808252602082015281526020019060019003908161376f5790505b50915060005b818110156138185760405180604001604052808583815181106137c1576137c16158d9565b602002602001015181526020016137f08684815181106137e3576137e36158d9565b6020026020010151613beb565b815250838281518110613805576138056158d9565b602090810291909101015260010161379c565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613877578060011b82018184015160001a8060041c8253600f811660018301535050600101613849565b509295945050505050565b6060600080600061389285613bfe565b9194509250905060008160018111156138ad576138ad61531f565b1461393a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016109e0565b6139448284615908565b8551146139d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016109e0565b6127d98560200151848461466b565b606060208260000151106139fe576139f982613882565b612089565b612089826146ff565b6060612089613a268360200151600081518110612be457612be46158d9565b61381f565b606082518210613a4a5750604080516020810190915260008152612089565b6126c18383848651613a5c919061545c565b614715565b6000808251845110613a74578251613a77565b83515b90505b8082108015613afe5750828281518110613a9657613a966158d9565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613ad557613ad56158d9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613b0e57816001019150613a7a565b5092915050565b6000808211613b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060612089613bf9836148ed565b6149d6565b600080600080846000015111613cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b6020840151805160001a607f8111613ce1576000600160009450945094505050614664565b60b78111613eef576000613cf660808361545c565b905080876000015111613db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016109e0565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613e2a57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016109e0565b5060019550935060009250614664915050565b60bf811161423d576000613f0460b78361545c565b905080876000015111613fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016109e0565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361409d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016109e0565b61416b8184615908565b895111614220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016109e0565b61422b836001615908565b97509550600094506146649350505050565b60f7811161431e57600061425260c08361545c565b90508087600001511161430d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b600195509350849250614664915050565b600061432b60f78361545c565b9050808760000151116143e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016109e0565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036144c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016109e0565b6145928184615908565b895111614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b614652836001615908565b97509550600194506146649350505050565b9193909250565b60608167ffffffffffffffff81111561468657614686614c38565b6040519080825280601f01601f1916602001820160405280156146b0576020820181803683370190505b50905081156126c15760006146c58486615908565b90506020820160005b848110156146e65782810151828201526020016146ce565b848111156146f5576000858301525b5050509392505050565b606061208982602001516000846000015161466b565b60608182601f011015614784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8282840110156147f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8183018451101561485d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b60608215801561487c57604051915060008252602082016040526148e4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156148b557805183526020928301920161489d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116149b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b50604080518082019091528151815260209182019181019190915290565b606060008060006149e685613bfe565b919450925090506001816001811115614a0157614a0161531f565b14614a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016109e0565b8451614a9a8385615908565b14614b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016109e0565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614b3e5790505093506000835b8651811015614c2c57600080614bb16040518060400160405280858c60000151614b95919061545c565b8152602001858c60200151614baa9190615908565b9052613bfe565b509150915060405180604001604052808383614bcd9190615908565b8152602001848b60200151614be29190615908565b815250888581518110614bf757614bf76158d9565b6020908102919091010152614c0d600185615908565b9350614c198183615908565b614c239084615908565b92505050614b6b565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cae57614cae614c38565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611db857600080fd5b600082601f830112614ce957600080fd5b813567ffffffffffffffff811115614d0357614d03614c38565b614d3460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614c67565b818152846020838601011115614d4957600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614d7857600080fd5b60405160c0810167ffffffffffffffff8282108183111715614d9c57614d9c614c38565b816040528293508435835260208501359150614db782614cb6565b81602084015260408501359150614dcd82614cb6565b816040840152606085013560608401526080850135608084015260a0850135915080821115614dfb57600080fd5b50614e0885828601614cd8565b60a0830152505092915050565b60008060408385031215614e2857600080fd5b823567ffffffffffffffff811115614e3f57600080fd5b614e4b85828601614d66565b9250506020830135614e5c81614cb6565b809150509250929050565b600060208284031215614e7957600080fd5b81356126c181614cb6565b600080600080600085870360e0811215614e9d57600080fd5b863567ffffffffffffffff80821115614eb557600080fd5b614ec18a838b01614d66565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614efa57600080fd5b60408901955060c0890135925080831115614f1457600080fd5b828901925089601f840112614f2857600080fd5b8235915080821115614f3957600080fd5b508860208260051b8401011115614f4f57600080fd5b959894975092955050506020019190565b600060208284031215614f7257600080fd5b5035919050565b60005b83811015614f94578181015183820152602001614f7c565b83811115610b545750506000910152565b60008151808452614fbd816020860160208601614f79565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006126c16020830184614fa5565b6000806040838503121561501557600080fd5b823591506020830135614e5c81614cb6565b63ffffffff81168114611db857600080fd5b60006020828403121561504b57600080fd5b81356126c181615027565b60006020828403121561506857600080fd5b813567ffffffffffffffff81111561507f57600080fd5b61508b84828501614d66565b949350505050565b600080600080608085870312156150a957600080fd5b84356150b481614cb6565b935060208501356150c481614cb6565b925060408501356150d481614cb6565b915060608501356150e481615027565b939692955090935050565b67ffffffffffffffff81168114611db857600080fd5b60006020828403121561511757600080fd5b81356126c1816150ef565b6000806040838503121561513557600080fd5b50508035926020909101359150565b8015158114611db857600080fd5b600080600080600060a0868803121561516a57600080fd5b853561517581614cb6565b945060208601359350604086013561518c816150ef565b9250606086013561519c81615144565b9150608086013567ffffffffffffffff8111156151b857600080fd5b6151c488828901614cd8565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615225816049850160208701614f79565b919091016049019695505050505050565b60006020828403121561524857600080fd5b81516126c181614cb6565b60008060006060848603121561526857600080fd5b835161527381615027565b6020850151909350615284816150ef565b604085015190925061529581614cb6565b809150509250925092565b6000602082840312156152b257600080fd5b5051919050565b6000608082840312156152cb57600080fd5b6040516080810181811067ffffffffffffffff821117156152ee576152ee614c38565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561536057600080fd5b8151600381106126c157600080fd5b600067ffffffffffffffff8084111561538a5761538a614c38565b8360051b602061539b818301614c67565b8681529185019181810190368411156153b357600080fd5b865b848110156153e7578035868111156153cd5760008081fd5b6153d936828b01614cd8565b8452509183019183016153b5565b50979650505050505050565b60006020828403121561540557600080fd5b81516126c181615144565b60006020828403121561542257600080fd5b81516126c1816150ef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561546e5761546e61542d565b500390565b60006020828403121561548557600080fd5b81516126c181615027565b600067ffffffffffffffff808316818516818304811182151516156154b7576154b761542d565b02949350505050565b600067ffffffffffffffff8083168185168083038211156154e3576154e361542d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261552a5761552a6154ec565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561557e5761557e61542d565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156155bd576155bd61542d565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156155f1576155f161542d565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156156385761563861542d565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156156735761567361542d565b6000871292508782058712848416161561568f5761568f61542d565b878505871281841616156156a5576156a561542d565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156156ed576156ed61542d565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156157215761572161542d565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561575f5761575f61542d565b500290565b600082615773576157736154ec565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526157c360c0830184614fa5565b98975050505050505050565b805160ff811681146157e057600080fd5b919050565b600060c082840312156157f757600080fd5b60405160c0810181811067ffffffffffffffff8211171561581a5761581a614c38565b604052825161582881615027565b8152615836602084016157cf565b6020820152615847604084016157cf565b6040820152606083015161585a81615027565b6060820152608083015161586d81615027565b608082015260a08301516fffffffffffffffffffffffffffffffff8116811461589557600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158d2576158d261542d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561591b5761591b61542d565b500190565b600060ff831680615933576159336154ec565b8060ff84160691505092915050565b600060ff821660ff84168082101561595c5761595c61542d565b9003939250505056fea164736f6c634300080f000a" - - -func init() { - if err := json.Unmarshal([]byte(OptimismPortal2StorageLayoutJSON), OptimismPortal2StorageLayout); err != nil { - panic(err) - } - - layouts["OptimismPortal2"] = OptimismPortal2StorageLayout - deployedBytecodes["OptimismPortal2"] = OptimismPortal2DeployedBin - immutableReferences["OptimismPortal2"] = true -} From 672414db83fb9cfadeadda11a5e2405700934db0 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 30 Apr 2024 17:36:46 -0600 Subject: [PATCH 24/45] bindings: add back bindingspreview --- .../bindingspreview/optimismportal2.go | 1633 +++++++++++++++++ 1 file changed, 1633 insertions(+) create mode 100644 op-bindings/bindingspreview/optimismportal2.go diff --git a/op-bindings/bindingspreview/optimismportal2.go b/op-bindings/bindingspreview/optimismportal2.go new file mode 100644 index 00000000000..5223dcec05d --- /dev/null +++ b/op-bindings/bindingspreview/optimismportal2.go @@ -0,0 +1,1633 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindingspreview + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription +) + +// TypesOutputRootProof is an auto generated low-level Go binding around an user-defined struct. +type TypesOutputRootProof struct { + Version [32]byte + StateRoot [32]byte + MessagePasserStorageRoot [32]byte + LatestBlockhash [32]byte +} + +// TypesWithdrawalTransaction is an auto generated low-level Go binding around an user-defined struct. +type TypesWithdrawalTransaction struct { + Nonce *big.Int + Sender common.Address + Target common.Address + Value *big.Int + GasLimit *big.Int + Data []byte +} + +// OptimismPortal2MetaData contains all meta data concerning the OptimismPortal2 contract. +var OptimismPortal2MetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_proofMaturityDelaySeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_disputeGameFinalityDelaySeconds\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"blacklistDisputeGame\",\"inputs\":[{\"name\":\"_disputeGame\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkWithdrawal\",\"inputs\":[{\"name\":\"_withdrawalHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_proofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositTransaction\",\"inputs\":[{\"name\":\"_to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_isCreation\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"_data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"disputeGameBlacklist\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractDisputeGameFactory\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFinalityDelaySeconds\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"donateETH\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizeWithdrawalTransactionExternalProof\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_proofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"finalizedWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_disputeGameFactory\",\"type\":\"address\",\"internalType\":\"contractDisputeGameFactory\"},{\"name\":\"_systemConfig\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"},{\"name\":\"_initialRespectedGameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l2Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[{\"name\":\"_byteCount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"numProofSubmitters\",\"inputs\":[{\"name\":\"_withdrawalHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"params\",\"inputs\":[],\"outputs\":[{\"name\":\"prevBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"},{\"name\":\"prevBoughtGas\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"prevBlockNum\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofMaturityDelaySeconds\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofSubmitters\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proveWithdrawalTransaction\",\"inputs\":[{\"name\":\"_tx\",\"type\":\"tuple\",\"internalType\":\"structTypes.WithdrawalTransaction\",\"components\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasLimit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"_disputeGameIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_outputRootProof\",\"type\":\"tuple\",\"internalType\":\"structTypes.OutputRootProof\",\"components\":[{\"name\":\"version\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"stateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"latestBlockhash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"provenWithdrawals\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"disputeGameProxy\",\"type\":\"address\",\"internalType\":\"contractIDisputeGame\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"respectedGameType\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"respectedGameTypeUpdatedAt\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setRespectedGameType\",\"inputs\":[{\"name\":\"_gameType\",\"type\":\"uint32\",\"internalType\":\"GameType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"systemConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractSystemConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransactionDeposited\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"opaqueData\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalFinalized\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"success\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalProven\",\"inputs\":[{\"name\":\"withdrawalHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BadTarget\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GasEstimation\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LargeCalldata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfGas\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SmallGasLimit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Unauthorized\",\"inputs\":[]}]", + Bin: "0x60c06040523480156200001157600080fd5b5060405162005cbd38038062005cbd8339810160408190526200003491620002f2565b608082905260a08190526200004d600080808062000055565b505062000317565b600054610100900460ff1615808015620000765750600054600160ff909116105b80620000a6575062000093306200022460201b620020d41760201c565b158015620000a6575060005460ff166001145b6200010f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000133576000805461ff0019166101001790555b603880546001600160a01b03199081166001600160a01b03888116919091179092556037805490911686831617905560358054610100600160a81b0319166101008684160217905560325416620001cc576032805461dead6001600160a01b0319909116179055603b80546001600160601b031916640100000000426001600160401b03160263ffffffff19161763ffffffff84161790555b620001d662000233565b80156200021d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002a05760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840162000106565b600154600160c01b90046001600160401b0316600003620002f05760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b600080604083850312156200030657600080fd5b505080516020909101519092909150565b60805160a0516159726200034b600039600081816104c30152611a4601526000818161063a015261168401526159726000f3fe6080604052600436106101b05760003560e01c80637fc48504116100ec578063a35d99df1161008a578063bf653a5c11610064578063bf653a5c1461062b578063cff0ab961461065e578063e9e05c42146106ff578063f2b4e6171461071257600080fd5b8063a35d99df14610544578063a3860f4814610564578063bb2c727e1461058457600080fd5b80638e819e54116100c65780638e819e5414610494578063952b2797146104b45780639bf62d82146104e7578063a14238e71461051457600080fd5b80637fc48504146104545780638b4c40b0146101d55780638c3152e91461047457600080fd5b80634870496f1161015957806354fd4d501161013357806354fd4d50146103a95780635c975abb146103ff57806371c1566e146104145780637d6be8dc1461043457600080fd5b80634870496f1461030c5780634fd0434c1461032c578063513747ab1461036e57600080fd5b806343ca1c501161018a57806343ca1c5014610297578063452a9320146102b757806345884d32146102cc57600080fd5b806333d7e2bd146101dc57806335e80ab3146102335780633c9f397c1461026557600080fd5b366101d7576101d53334620186a060006040518060200160405280600081525061073f565b005b600080fd5b3480156101e857600080fd5b506037546102099073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561023f57600080fd5b5060355461020990610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561027157600080fd5b50603b546102829063ffffffff1681565b60405163ffffffff909116815260200161022a565b3480156102a357600080fd5b506101d56102b2366004614e15565b6108fc565b3480156102c357600080fd5b50610209610b5a565b3480156102d857600080fd5b506102fc6102e7366004614e67565b603a6020526000908152604090205460ff1681565b604051901515815260200161022a565b34801561031857600080fd5b506101d5610327366004614e84565b610bf2565b34801561033857600080fd5b50603b5461035590640100000000900467ffffffffffffffff1681565b60405167ffffffffffffffff909116815260200161022a565b34801561037a57600080fd5b5061039b610389366004614f60565b6000908152603c602052604090205490565b60405190815260200161022a565b3480156103b557600080fd5b506103f26040518060400160405280600581526020017f332e382e3000000000000000000000000000000000000000000000000000000081525081565b60405161022a9190614fef565b34801561040b57600080fd5b506102fc6112d6565b34801561042057600080fd5b506101d561042f366004615002565b611369565b34801561044057600080fd5b506101d561044f366004614e67565b611bfa565b34801561046057600080fd5b506101d561046f366004615039565b611cb5565b34801561048057600080fd5b506101d561048f366004615056565b611d6f565b3480156104a057600080fd5b506101d56104af366004615093565b611dbb565b3480156104c057600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b3480156104f357600080fd5b506032546102099073ffffffffffffffffffffffffffffffffffffffff1681565b34801561052057600080fd5b506102fc61052f366004614f60565b60336020526000908152604090205460ff1681565b34801561055057600080fd5b5061035561055f366004615105565b612070565b34801561057057600080fd5b5061020961057f366004615122565b61208f565b34801561059057600080fd5b506105f661059f366004615002565b603960209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff81169074010000000000000000000000000000000000000000900467ffffffffffffffff1682565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835267ffffffffffffffff90911660208301520161022a565b34801561063757600080fd5b507f000000000000000000000000000000000000000000000000000000000000000061039b565b34801561066a57600080fd5b506001546106c6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff928316602085015291169082015260600161022a565b6101d561070d366004615152565b61073f565b34801561071e57600080fd5b506038546102099073ffffffffffffffffffffffffffffffffffffffff1681565b8260005a9050838015610767575073ffffffffffffffffffffffffffffffffffffffff871615155b1561079e576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107a88351612070565b67ffffffffffffffff168567ffffffffffffffff1610156107f5576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c083511115610833576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33328114610854575033731111000000000000000000000000000000001111015b6000348888888860405160200161086f9594939291906151d1565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516108df9190614fef565b60405180910390a450506108f382826120f0565b50505050505050565b6109046112d6565b1561093b576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead146109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084015b60405180910390fd5b60006109f4836123c7565b9050610a008183611369565b600081815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558401516080850151606086015160a0870151610aa293929190612414565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915082907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90610b0790841515815260200190565b60405180910390a280158015610b1d5750326001145b15610b54576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed9190615236565b905090565b610bfa6112d6565b15610c31576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610cf0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016109e0565b6038546040517fbb8aa1fc00000000000000000000000000000000000000000000000000000000815260048101869052600091829173ffffffffffffffffffffffffffffffffffffffff9091169063bb8aa1fc90602401606060405180830381865afa158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190615253565b925050915060008173ffffffffffffffffffffffffffffffffffffffff1663bcef3b556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dfe91906152a0565b603b5490915063ffffffff848116911614610e9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b610eb2610ead368890038801886152b9565b612472565b8114610f40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016109e0565b6000610f4b896123c7565b905060018373ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbe919061534e565b6002811115610fcf57610fcf61531f565b0361105c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4f7074696d69736d506f7274616c3a2063616e6e6f742070726f76652061676160448201527f696e737420696e76616c696420646973707574652067616d657300000000000060648201526084016109e0565b60408051602081018390526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012090830181905292506111259101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f010000000000000000000000000000000000000000000000000000000000000060208301529061111b898b61536f565b8b604001356124b1565b6111b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016109e0565b60408051808201825273ffffffffffffffffffffffffffffffffffffffff808716825267ffffffffffffffff4281166020808501918252600088815260398252868120338252825286812095518654935190941674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090931693851693909317919091179093558d840151928e01519351928216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f6291a4506000908152603c602090815260408220805460018101825590835291200180547fffffffffffffffffffffffff000000000000000000000000000000000000000016331790555050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611345573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906153f3565b600082815260396020908152604080832073ffffffffffffffffffffffffffffffffffffffff85811685529083528184208251808401845290549182168082527401000000000000000000000000000000000000000090920467ffffffffffffffff1681850152818552603a90935292205490919060ff161561146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652068617360448201527f206265656e20626c61636b6c697374656400000000000000000000000000000060648201526084016109e0565b816020015167ffffffffffffffff16600003611532576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2062792070726f6f66207375626d6974746560648201527f7220616464726573732079657400000000000000000000000000000000000000608482015260a4016109e0565b60006115b38273ffffffffffffffffffffffffffffffffffffffff1663cf09e0d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a69190615410565b67ffffffffffffffff1690565b90508067ffffffffffffffff16836020015167ffffffffffffffff1611611682576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e20646973707574652067616d65206372656160648201527f74696f6e2074696d657374616d70000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000836020015167ffffffffffffffff16426116bd919061545c565b1161174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c20686173206e6f74206d61747572656420796574000000000000000000000060648201526084016109e0565b60028273ffffffffffffffffffffffffffffffffffffffff1663200d2ed26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611797573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bb919061534e565b60028111156117cc576117cc61531f565b14611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f686173206e6f74206265656e2076616c6964617465640000000000000000000060648201526084016109e0565b603b5463ffffffff1663ffffffff166118e38373ffffffffffffffffffffffffffffffffffffffff1663bbdc02db6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118da9190615473565b63ffffffff1690565b63ffffffff1614611976576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a20696e76616c69642067616d652074797060448201527f650000000000000000000000000000000000000000000000000000000000000060648201526084016109e0565b603b5467ffffffffffffffff64010000000090910481169082161015611a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a20646973707574652067616d652063726560448201527f61746564206265666f7265207265737065637465642067616d6520747970652060648201527f7761732075706461746564000000000000000000000000000000000000000000608482015260a4016109e0565b7f0000000000000000000000000000000000000000000000000000000000000000611ab38373ffffffffffffffffffffffffffffffffffffffff166319effeb46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611582573d6000803e3d6000fd5b611ac79067ffffffffffffffff164261545c565b11611b54576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f696e206169722d6761700000000000000000000000000000000000000000000060648201526084016109e0565b60008581526033602052604090205460ff1615611bf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016109e0565b5050505050565b611c02610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611c66576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff166000908152603a6020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b611cbd610b5a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d21576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603b805463ffffffff929092167fffffffffffffffffffffffffffffffffffffffff000000000000000000000000909216919091176401000000004267ffffffffffffffff1602179055565b565b611d776112d6565b15611dae576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611db881336108fc565b50565b600054610100900460ff1615808015611ddb5750600054600160ff909116105b80611df55750303b158015611df5575060005460ff166001145b611e81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109e0565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611edf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603880547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8881169190911790925560378054909116868316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008684160217905560325416611fff576032805461dead7fffffffffffffffffffffffff0000000000000000000000000000000000000000909116179055603b80547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166401000000004267ffffffffffffffff16027fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000161763ffffffff84161790555b6120076124d5565b8015611bf357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600061207d826010615490565b612089906152086154c0565b92915050565b603c60205281600052604060002081815481106120ab57600080fd5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169150829050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600154600090612126907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361545c565b905060006121326125e8565b90506000816020015160ff16826000015163ffffffff16612153919061551b565b9050821561228a5760015460009061218a908390700100000000000000000000000000000000900467ffffffffffffffff16615583565b90506000836040015160ff16836121a191906155f7565b6001546121c19084906fffffffffffffffffffffffffffffffff166155f7565b6121cb919061551b565b60015490915060009061221c906121f59084906fffffffffffffffffffffffffffffffff166156b3565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166126a9565b9050600186111561224b576122486121f582876040015160ff1660018a612243919061545c565b6126c8565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b600180548691906010906122bd908490700100000000000000000000000000000000900467ffffffffffffffff166154c0565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff16131561234a576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612376906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615727565b9050600061238848633b9aca0061271d565b6123929083615764565b905060005a6123a1908861545c565b9050808211156123bd576123bd6123b8828461545c565b612734565b5050505050505050565b80516020808301516040808501516060860151608087015160a088015193516000976123f7979096959101615778565b604051602081830303815290604052805190602001209050919050565b6000806000612424866000612762565b90508061245a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600081600001518260200151836040015184606001516040516020016123f7949392919093845260208401929092526040830152606082015260800190565b6000806124bd86612780565b90506124cb818686866127b2565b9695505050505050565b600054610100900460ff1661256c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109e0565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16600003611d6d5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612685573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bed91906157e5565b60006126be6126b885856127e2565b836127f2565b90505b9392505050565b6000670de0b6b3a76400006127096126e0858361551b565b6126f290670de0b6b3a7640000615583565b61270485670de0b6b3a76400006155f7565b612801565b61271390866155f7565b6126be919061551b565b60008183101561272d57816126c1565b5090919050565b6000805a90505b825a612747908361545c565b101561275d57612756826158a1565b915061273b565b505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6060818051906020012060405160200161279c91815260200190565b6040516020818303038152906040529050919050565b60006127d9846127c3878686612832565b8051602091820120825192909101919091201490565b95945050505050565b60008183121561272d57816126c1565b600081831261272d57816126c1565b60006126c1670de0b6b3a764000083612819866132b0565b61282391906155f7565b61282d919061551b565b6134f4565b6060600084511161289f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016109e0565b60006128aa84613733565b905060006128b78661381f565b90506000846040516020016128ce91815260200190565b60405160208183030381529060405290506000805b8451811015613227576000858281518110612900576129006158d9565b60200260200101519050845183111561299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016109e0565b82600003612a5457805180516020918201206040516129e9926129c392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016109e0565b612bab565b805151602011612b0a5780518051602091820120604051612a7e926129c392910190815260200190565b612a4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016109e0565b805184516020808701919091208251919092012014612bab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016109e0565b612bb760106001615908565b81602001515103612d935784518303612d2b57612bf18160200151601081518110612be457612be46158d9565b6020026020010151613882565b96506000875111612c84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016109e0565b60018651612c92919061545c565b8214612d20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016109e0565b5050505050506126c1565b6000858481518110612d3f57612d3f6158d9565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612d6a57612d6a6158d9565b60200260200101519050612d7d816139e2565b9550612d8a600186615908565b94505050613214565b60028160200151510361318c576000612dab82613a07565b9050600081600081518110612dc257612dc26158d9565b016020015160f81c90506000612dd9600283615920565b612de4906002615942565b90506000612df5848360ff16613a2b565b90506000612e038a89613a2b565b90506000612e118383613a61565b905080835114612ea3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016109e0565b60ff851660021480612eb8575060ff85166003145b156130a75780825114612f4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016109e0565b612f678760200151600181518110612be457612be46158d9565b9c5060008d5111612ffa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016109e0565b60018c51613008919061545c565b8814613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016109e0565b5050505050505050505050506126c1565b60ff851615806130ba575060ff85166001145b156130f9576130e687602001516001815181106130d9576130d96158d9565b60200260200101516139e2565b99506130f2818a615908565b9850613181565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016109e0565b505050505050613214565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016109e0565b508061321f816158a1565b9150506128e3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016109e0565b600080821361331b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b6000606061332884613b15565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361352557506000919050565b680755bf798b4a1bf1e58212613597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016109e0565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561375157613751614c38565b60405190808252806020026020018201604052801561379657816020015b604080518082019091526060808252602082015281526020019060019003908161376f5790505b50915060005b818110156138185760405180604001604052808583815181106137c1576137c16158d9565b602002602001015181526020016137f08684815181106137e3576137e36158d9565b6020026020010151613beb565b815250838281518110613805576138056158d9565b602090810291909101015260010161379c565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613877578060011b82018184015160001a8060041c8253600f811660018301535050600101613849565b509295945050505050565b6060600080600061389285613bfe565b9194509250905060008160018111156138ad576138ad61531f565b1461393a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016109e0565b6139448284615908565b8551146139d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016109e0565b6127d98560200151848461466b565b606060208260000151106139fe576139f982613882565b612089565b612089826146ff565b6060612089613a268360200151600081518110612be457612be46158d9565b61381f565b606082518210613a4a5750604080516020810190915260008152612089565b6126c18383848651613a5c919061545c565b614715565b6000808251845110613a74578251613a77565b83515b90505b8082108015613afe5750828281518110613a9657613a966158d9565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916848381518110613ad557613ad56158d9565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613b0e57816001019150613a7a565b5092915050565b6000808211613b80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016109e0565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060612089613bf9836148ed565b6149d6565b600080600080846000015111613cbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b6020840151805160001a607f8111613ce1576000600160009450945094505050614664565b60b78111613eef576000613cf660808361545c565b905080876000015111613db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016109e0565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613e2a57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613edc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016109e0565b5060019550935060009250614664915050565b60bf811161423d576000613f0460b78361545c565b905080876000015111613fbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016109e0565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361409d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016109e0565b61416b8184615908565b895111614220576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016109e0565b61422b836001615908565b97509550600094506146649350505050565b60f7811161431e57600061425260c08361545c565b90508087600001511161430d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b600195509350849250614664915050565b600061432b60f78361545c565b9050808760000151116143e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016109e0565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036144c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016109e0565b600184015160088302610100031c60378111614588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016109e0565b6145928184615908565b895111614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016109e0565b614652836001615908565b97509550600194506146649350505050565b9193909250565b60608167ffffffffffffffff81111561468657614686614c38565b6040519080825280601f01601f1916602001820160405280156146b0576020820181803683370190505b50905081156126c15760006146c58486615908565b90506020820160005b848110156146e65782810151828201526020016146ce565b848111156146f5576000858301525b5050509392505050565b606061208982602001516000846000015161466b565b60608182601f011015614784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8282840110156147f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016109e0565b8183018451101561485d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016109e0565b60608215801561487c57604051915060008252602082016040526148e4565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156148b557805183526020928301920161489d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116149b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016109e0565b50604080518082019091528151815260209182019181019190915290565b606060008060006149e685613bfe565b919450925090506001816001811115614a0157614a0161531f565b14614a8e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016109e0565b8451614a9a8385615908565b14614b27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016109e0565b604080516020808252610420820190925290816020015b6040805180820190915260008082526020820152815260200190600190039081614b3e5790505093506000835b8651811015614c2c57600080614bb16040518060400160405280858c60000151614b95919061545c565b8152602001858c60200151614baa9190615908565b9052613bfe565b509150915060405180604001604052808383614bcd9190615908565b8152602001848b60200151614be29190615908565b815250888581518110614bf757614bf76158d9565b6020908102919091010152614c0d600185615908565b9350614c198183615908565b614c239084615908565b92505050614b6b565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614cae57614cae614c38565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611db857600080fd5b600082601f830112614ce957600080fd5b813567ffffffffffffffff811115614d0357614d03614c38565b614d3460207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614c67565b818152846020838601011115614d4957600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614d7857600080fd5b60405160c0810167ffffffffffffffff8282108183111715614d9c57614d9c614c38565b816040528293508435835260208501359150614db782614cb6565b81602084015260408501359150614dcd82614cb6565b816040840152606085013560608401526080850135608084015260a0850135915080821115614dfb57600080fd5b50614e0885828601614cd8565b60a0830152505092915050565b60008060408385031215614e2857600080fd5b823567ffffffffffffffff811115614e3f57600080fd5b614e4b85828601614d66565b9250506020830135614e5c81614cb6565b809150509250929050565b600060208284031215614e7957600080fd5b81356126c181614cb6565b600080600080600085870360e0811215614e9d57600080fd5b863567ffffffffffffffff80821115614eb557600080fd5b614ec18a838b01614d66565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614efa57600080fd5b60408901955060c0890135925080831115614f1457600080fd5b828901925089601f840112614f2857600080fd5b8235915080821115614f3957600080fd5b508860208260051b8401011115614f4f57600080fd5b959894975092955050506020019190565b600060208284031215614f7257600080fd5b5035919050565b60005b83811015614f94578181015183820152602001614f7c565b83811115610b545750506000910152565b60008151808452614fbd816020860160208601614f79565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006126c16020830184614fa5565b6000806040838503121561501557600080fd5b823591506020830135614e5c81614cb6565b63ffffffff81168114611db857600080fd5b60006020828403121561504b57600080fd5b81356126c181615027565b60006020828403121561506857600080fd5b813567ffffffffffffffff81111561507f57600080fd5b61508b84828501614d66565b949350505050565b600080600080608085870312156150a957600080fd5b84356150b481614cb6565b935060208501356150c481614cb6565b925060408501356150d481614cb6565b915060608501356150e481615027565b939692955090935050565b67ffffffffffffffff81168114611db857600080fd5b60006020828403121561511757600080fd5b81356126c1816150ef565b6000806040838503121561513557600080fd5b50508035926020909101359150565b8015158114611db857600080fd5b600080600080600060a0868803121561516a57600080fd5b853561517581614cb6565b945060208601359350604086013561518c816150ef565b9250606086013561519c81615144565b9150608086013567ffffffffffffffff8111156151b857600080fd5b6151c488828901614cd8565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615225816049850160208701614f79565b919091016049019695505050505050565b60006020828403121561524857600080fd5b81516126c181614cb6565b60008060006060848603121561526857600080fd5b835161527381615027565b6020850151909350615284816150ef565b604085015190925061529581614cb6565b809150509250925092565b6000602082840312156152b257600080fd5b5051919050565b6000608082840312156152cb57600080fd5b6040516080810181811067ffffffffffffffff821117156152ee576152ee614c38565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006020828403121561536057600080fd5b8151600381106126c157600080fd5b600067ffffffffffffffff8084111561538a5761538a614c38565b8360051b602061539b818301614c67565b8681529185019181810190368411156153b357600080fd5b865b848110156153e7578035868111156153cd5760008081fd5b6153d936828b01614cd8565b8452509183019183016153b5565b50979650505050505050565b60006020828403121561540557600080fd5b81516126c181615144565b60006020828403121561542257600080fd5b81516126c1816150ef565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561546e5761546e61542d565b500390565b60006020828403121561548557600080fd5b81516126c181615027565b600067ffffffffffffffff808316818516818304811182151516156154b7576154b761542d565b02949350505050565b600067ffffffffffffffff8083168185168083038211156154e3576154e361542d565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261552a5761552a6154ec565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561557e5761557e61542d565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156155bd576155bd61542d565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156155f1576155f161542d565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156156385761563861542d565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156156735761567361542d565b6000871292508782058712848416161561568f5761568f61542d565b878505871281841616156156a5576156a561542d565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156156ed576156ed61542d565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156157215761572161542d565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561575f5761575f61542d565b500290565b600082615773576157736154ec565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526157c360c0830184614fa5565b98975050505050505050565b805160ff811681146157e057600080fd5b919050565b600060c082840312156157f757600080fd5b60405160c0810181811067ffffffffffffffff8211171561581a5761581a614c38565b604052825161582881615027565b8152615836602084016157cf565b6020820152615847604084016157cf565b6040820152606083015161585a81615027565b6060820152608083015161586d81615027565b608082015260a08301516fffffffffffffffffffffffffffffffff8116811461589557600080fd5b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036158d2576158d261542d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561591b5761591b61542d565b500190565b600060ff831680615933576159336154ec565b8060ff84160691505092915050565b600060ff821660ff84168082101561595c5761595c61542d565b9003939250505056fea164736f6c634300080f000a", +} + +// OptimismPortal2ABI is the input ABI used to generate the binding from. +// Deprecated: Use OptimismPortal2MetaData.ABI instead. +var OptimismPortal2ABI = OptimismPortal2MetaData.ABI + +// OptimismPortal2Bin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use OptimismPortal2MetaData.Bin instead. +var OptimismPortal2Bin = OptimismPortal2MetaData.Bin + +// DeployOptimismPortal2 deploys a new Ethereum contract, binding an instance of OptimismPortal2 to it. +func DeployOptimismPortal2(auth *bind.TransactOpts, backend bind.ContractBackend, _proofMaturityDelaySeconds *big.Int, _disputeGameFinalityDelaySeconds *big.Int) (common.Address, *types.Transaction, *OptimismPortal2, error) { + parsed, err := OptimismPortal2MetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismPortal2Bin), backend, _proofMaturityDelaySeconds, _disputeGameFinalityDelaySeconds) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismPortal2{OptimismPortal2Caller: OptimismPortal2Caller{contract: contract}, OptimismPortal2Transactor: OptimismPortal2Transactor{contract: contract}, OptimismPortal2Filterer: OptimismPortal2Filterer{contract: contract}}, nil +} + +// OptimismPortal2 is an auto generated Go binding around an Ethereum contract. +type OptimismPortal2 struct { + OptimismPortal2Caller // Read-only binding to the contract + OptimismPortal2Transactor // Write-only binding to the contract + OptimismPortal2Filterer // Log filterer for contract events +} + +// OptimismPortal2Caller is an auto generated read-only Go binding around an Ethereum contract. +type OptimismPortal2Caller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismPortal2Transactor is an auto generated write-only Go binding around an Ethereum contract. +type OptimismPortal2Transactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismPortal2Filterer is an auto generated log filtering Go binding around an Ethereum contract events. +type OptimismPortal2Filterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// OptimismPortal2Session is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type OptimismPortal2Session struct { + Contract *OptimismPortal2 // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OptimismPortal2CallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type OptimismPortal2CallerSession struct { + Contract *OptimismPortal2Caller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// OptimismPortal2TransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type OptimismPortal2TransactorSession struct { + Contract *OptimismPortal2Transactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// OptimismPortal2Raw is an auto generated low-level Go binding around an Ethereum contract. +type OptimismPortal2Raw struct { + Contract *OptimismPortal2 // Generic contract binding to access the raw methods on +} + +// OptimismPortal2CallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type OptimismPortal2CallerRaw struct { + Contract *OptimismPortal2Caller // Generic read-only contract binding to access the raw methods on +} + +// OptimismPortal2TransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type OptimismPortal2TransactorRaw struct { + Contract *OptimismPortal2Transactor // Generic write-only contract binding to access the raw methods on +} + +// NewOptimismPortal2 creates a new instance of OptimismPortal2, bound to a specific deployed contract. +func NewOptimismPortal2(address common.Address, backend bind.ContractBackend) (*OptimismPortal2, error) { + contract, err := bindOptimismPortal2(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismPortal2{OptimismPortal2Caller: OptimismPortal2Caller{contract: contract}, OptimismPortal2Transactor: OptimismPortal2Transactor{contract: contract}, OptimismPortal2Filterer: OptimismPortal2Filterer{contract: contract}}, nil +} + +// NewOptimismPortal2Caller creates a new read-only instance of OptimismPortal2, bound to a specific deployed contract. +func NewOptimismPortal2Caller(address common.Address, caller bind.ContractCaller) (*OptimismPortal2Caller, error) { + contract, err := bindOptimismPortal2(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismPortal2Caller{contract: contract}, nil +} + +// NewOptimismPortal2Transactor creates a new write-only instance of OptimismPortal2, bound to a specific deployed contract. +func NewOptimismPortal2Transactor(address common.Address, transactor bind.ContractTransactor) (*OptimismPortal2Transactor, error) { + contract, err := bindOptimismPortal2(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismPortal2Transactor{contract: contract}, nil +} + +// NewOptimismPortal2Filterer creates a new log filterer instance of OptimismPortal2, bound to a specific deployed contract. +func NewOptimismPortal2Filterer(address common.Address, filterer bind.ContractFilterer) (*OptimismPortal2Filterer, error) { + contract, err := bindOptimismPortal2(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismPortal2Filterer{contract: contract}, nil +} + +// bindOptimismPortal2 binds a generic wrapper to an already deployed contract. +func bindOptimismPortal2(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := abi.JSON(strings.NewReader(OptimismPortal2ABI)) + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OptimismPortal2 *OptimismPortal2Raw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismPortal2.Contract.OptimismPortal2Caller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OptimismPortal2 *OptimismPortal2Raw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismPortal2.Contract.OptimismPortal2Transactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OptimismPortal2 *OptimismPortal2Raw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismPortal2.Contract.OptimismPortal2Transactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_OptimismPortal2 *OptimismPortal2CallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismPortal2.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_OptimismPortal2 *OptimismPortal2TransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismPortal2.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_OptimismPortal2 *OptimismPortal2TransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismPortal2.Contract.contract.Transact(opts, method, params...) +} + +// CheckWithdrawal is a free data retrieval call binding the contract method 0x71c1566e. +// +// Solidity: function checkWithdrawal(bytes32 _withdrawalHash, address _proofSubmitter) view returns() +func (_OptimismPortal2 *OptimismPortal2Caller) CheckWithdrawal(opts *bind.CallOpts, _withdrawalHash [32]byte, _proofSubmitter common.Address) error { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "checkWithdrawal", _withdrawalHash, _proofSubmitter) + + if err != nil { + return err + } + + return err + +} + +// CheckWithdrawal is a free data retrieval call binding the contract method 0x71c1566e. +// +// Solidity: function checkWithdrawal(bytes32 _withdrawalHash, address _proofSubmitter) view returns() +func (_OptimismPortal2 *OptimismPortal2Session) CheckWithdrawal(_withdrawalHash [32]byte, _proofSubmitter common.Address) error { + return _OptimismPortal2.Contract.CheckWithdrawal(&_OptimismPortal2.CallOpts, _withdrawalHash, _proofSubmitter) +} + +// CheckWithdrawal is a free data retrieval call binding the contract method 0x71c1566e. +// +// Solidity: function checkWithdrawal(bytes32 _withdrawalHash, address _proofSubmitter) view returns() +func (_OptimismPortal2 *OptimismPortal2CallerSession) CheckWithdrawal(_withdrawalHash [32]byte, _proofSubmitter common.Address) error { + return _OptimismPortal2.Contract.CheckWithdrawal(&_OptimismPortal2.CallOpts, _withdrawalHash, _proofSubmitter) +} + +// DisputeGameBlacklist is a free data retrieval call binding the contract method 0x45884d32. +// +// Solidity: function disputeGameBlacklist(address ) view returns(bool) +func (_OptimismPortal2 *OptimismPortal2Caller) DisputeGameBlacklist(opts *bind.CallOpts, arg0 common.Address) (bool, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "disputeGameBlacklist", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// DisputeGameBlacklist is a free data retrieval call binding the contract method 0x45884d32. +// +// Solidity: function disputeGameBlacklist(address ) view returns(bool) +func (_OptimismPortal2 *OptimismPortal2Session) DisputeGameBlacklist(arg0 common.Address) (bool, error) { + return _OptimismPortal2.Contract.DisputeGameBlacklist(&_OptimismPortal2.CallOpts, arg0) +} + +// DisputeGameBlacklist is a free data retrieval call binding the contract method 0x45884d32. +// +// Solidity: function disputeGameBlacklist(address ) view returns(bool) +func (_OptimismPortal2 *OptimismPortal2CallerSession) DisputeGameBlacklist(arg0 common.Address) (bool, error) { + return _OptimismPortal2.Contract.DisputeGameBlacklist(&_OptimismPortal2.CallOpts, arg0) +} + +// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. +// +// Solidity: function disputeGameFactory() view returns(address) +func (_OptimismPortal2 *OptimismPortal2Caller) DisputeGameFactory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "disputeGameFactory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. +// +// Solidity: function disputeGameFactory() view returns(address) +func (_OptimismPortal2 *OptimismPortal2Session) DisputeGameFactory() (common.Address, error) { + return _OptimismPortal2.Contract.DisputeGameFactory(&_OptimismPortal2.CallOpts) +} + +// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. +// +// Solidity: function disputeGameFactory() view returns(address) +func (_OptimismPortal2 *OptimismPortal2CallerSession) DisputeGameFactory() (common.Address, error) { + return _OptimismPortal2.Contract.DisputeGameFactory(&_OptimismPortal2.CallOpts) +} + +// DisputeGameFinalityDelaySeconds is a free data retrieval call binding the contract method 0x952b2797. +// +// Solidity: function disputeGameFinalityDelaySeconds() view returns(uint256) +func (_OptimismPortal2 *OptimismPortal2Caller) DisputeGameFinalityDelaySeconds(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "disputeGameFinalityDelaySeconds") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// DisputeGameFinalityDelaySeconds is a free data retrieval call binding the contract method 0x952b2797. +// +// Solidity: function disputeGameFinalityDelaySeconds() view returns(uint256) +func (_OptimismPortal2 *OptimismPortal2Session) DisputeGameFinalityDelaySeconds() (*big.Int, error) { + return _OptimismPortal2.Contract.DisputeGameFinalityDelaySeconds(&_OptimismPortal2.CallOpts) +} + +// DisputeGameFinalityDelaySeconds is a free data retrieval call binding the contract method 0x952b2797. +// +// Solidity: function disputeGameFinalityDelaySeconds() view returns(uint256) +func (_OptimismPortal2 *OptimismPortal2CallerSession) DisputeGameFinalityDelaySeconds() (*big.Int, error) { + return _OptimismPortal2.Contract.DisputeGameFinalityDelaySeconds(&_OptimismPortal2.CallOpts) +} + +// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. +// +// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) +func (_OptimismPortal2 *OptimismPortal2Caller) FinalizedWithdrawals(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "finalizedWithdrawals", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. +// +// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) +func (_OptimismPortal2 *OptimismPortal2Session) FinalizedWithdrawals(arg0 [32]byte) (bool, error) { + return _OptimismPortal2.Contract.FinalizedWithdrawals(&_OptimismPortal2.CallOpts, arg0) +} + +// FinalizedWithdrawals is a free data retrieval call binding the contract method 0xa14238e7. +// +// Solidity: function finalizedWithdrawals(bytes32 ) view returns(bool) +func (_OptimismPortal2 *OptimismPortal2CallerSession) FinalizedWithdrawals(arg0 [32]byte) (bool, error) { + return _OptimismPortal2.Contract.FinalizedWithdrawals(&_OptimismPortal2.CallOpts, arg0) +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_OptimismPortal2 *OptimismPortal2Caller) Guardian(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "guardian") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_OptimismPortal2 *OptimismPortal2Session) Guardian() (common.Address, error) { + return _OptimismPortal2.Contract.Guardian(&_OptimismPortal2.CallOpts) +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_OptimismPortal2 *OptimismPortal2CallerSession) Guardian() (common.Address, error) { + return _OptimismPortal2.Contract.Guardian(&_OptimismPortal2.CallOpts) +} + +// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. +// +// Solidity: function l2Sender() view returns(address) +func (_OptimismPortal2 *OptimismPortal2Caller) L2Sender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "l2Sender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. +// +// Solidity: function l2Sender() view returns(address) +func (_OptimismPortal2 *OptimismPortal2Session) L2Sender() (common.Address, error) { + return _OptimismPortal2.Contract.L2Sender(&_OptimismPortal2.CallOpts) +} + +// L2Sender is a free data retrieval call binding the contract method 0x9bf62d82. +// +// Solidity: function l2Sender() view returns(address) +func (_OptimismPortal2 *OptimismPortal2CallerSession) L2Sender() (common.Address, error) { + return _OptimismPortal2.Contract.L2Sender(&_OptimismPortal2.CallOpts) +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. +// +// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) +func (_OptimismPortal2 *OptimismPortal2Caller) MinimumGasLimit(opts *bind.CallOpts, _byteCount uint64) (uint64, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "minimumGasLimit", _byteCount) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. +// +// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) +func (_OptimismPortal2 *OptimismPortal2Session) MinimumGasLimit(_byteCount uint64) (uint64, error) { + return _OptimismPortal2.Contract.MinimumGasLimit(&_OptimismPortal2.CallOpts, _byteCount) +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0xa35d99df. +// +// Solidity: function minimumGasLimit(uint64 _byteCount) pure returns(uint64) +func (_OptimismPortal2 *OptimismPortal2CallerSession) MinimumGasLimit(_byteCount uint64) (uint64, error) { + return _OptimismPortal2.Contract.MinimumGasLimit(&_OptimismPortal2.CallOpts, _byteCount) +} + +// NumProofSubmitters is a free data retrieval call binding the contract method 0x513747ab. +// +// Solidity: function numProofSubmitters(bytes32 _withdrawalHash) view returns(uint256) +func (_OptimismPortal2 *OptimismPortal2Caller) NumProofSubmitters(opts *bind.CallOpts, _withdrawalHash [32]byte) (*big.Int, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "numProofSubmitters", _withdrawalHash) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// NumProofSubmitters is a free data retrieval call binding the contract method 0x513747ab. +// +// Solidity: function numProofSubmitters(bytes32 _withdrawalHash) view returns(uint256) +func (_OptimismPortal2 *OptimismPortal2Session) NumProofSubmitters(_withdrawalHash [32]byte) (*big.Int, error) { + return _OptimismPortal2.Contract.NumProofSubmitters(&_OptimismPortal2.CallOpts, _withdrawalHash) +} + +// NumProofSubmitters is a free data retrieval call binding the contract method 0x513747ab. +// +// Solidity: function numProofSubmitters(bytes32 _withdrawalHash) view returns(uint256) +func (_OptimismPortal2 *OptimismPortal2CallerSession) NumProofSubmitters(_withdrawalHash [32]byte) (*big.Int, error) { + return _OptimismPortal2.Contract.NumProofSubmitters(&_OptimismPortal2.CallOpts, _withdrawalHash) +} + +// Params is a free data retrieval call binding the contract method 0xcff0ab96. +// +// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) +func (_OptimismPortal2 *OptimismPortal2Caller) Params(opts *bind.CallOpts) (struct { + PrevBaseFee *big.Int + PrevBoughtGas uint64 + PrevBlockNum uint64 +}, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "params") + + outstruct := new(struct { + PrevBaseFee *big.Int + PrevBoughtGas uint64 + PrevBlockNum uint64 + }) + if err != nil { + return *outstruct, err + } + + outstruct.PrevBaseFee = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.PrevBoughtGas = *abi.ConvertType(out[1], new(uint64)).(*uint64) + outstruct.PrevBlockNum = *abi.ConvertType(out[2], new(uint64)).(*uint64) + + return *outstruct, err + +} + +// Params is a free data retrieval call binding the contract method 0xcff0ab96. +// +// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) +func (_OptimismPortal2 *OptimismPortal2Session) Params() (struct { + PrevBaseFee *big.Int + PrevBoughtGas uint64 + PrevBlockNum uint64 +}, error) { + return _OptimismPortal2.Contract.Params(&_OptimismPortal2.CallOpts) +} + +// Params is a free data retrieval call binding the contract method 0xcff0ab96. +// +// Solidity: function params() view returns(uint128 prevBaseFee, uint64 prevBoughtGas, uint64 prevBlockNum) +func (_OptimismPortal2 *OptimismPortal2CallerSession) Params() (struct { + PrevBaseFee *big.Int + PrevBoughtGas uint64 + PrevBlockNum uint64 +}, error) { + return _OptimismPortal2.Contract.Params(&_OptimismPortal2.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_OptimismPortal2 *OptimismPortal2Caller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_OptimismPortal2 *OptimismPortal2Session) Paused() (bool, error) { + return _OptimismPortal2.Contract.Paused(&_OptimismPortal2.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_OptimismPortal2 *OptimismPortal2CallerSession) Paused() (bool, error) { + return _OptimismPortal2.Contract.Paused(&_OptimismPortal2.CallOpts) +} + +// ProofMaturityDelaySeconds is a free data retrieval call binding the contract method 0xbf653a5c. +// +// Solidity: function proofMaturityDelaySeconds() view returns(uint256) +func (_OptimismPortal2 *OptimismPortal2Caller) ProofMaturityDelaySeconds(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "proofMaturityDelaySeconds") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// ProofMaturityDelaySeconds is a free data retrieval call binding the contract method 0xbf653a5c. +// +// Solidity: function proofMaturityDelaySeconds() view returns(uint256) +func (_OptimismPortal2 *OptimismPortal2Session) ProofMaturityDelaySeconds() (*big.Int, error) { + return _OptimismPortal2.Contract.ProofMaturityDelaySeconds(&_OptimismPortal2.CallOpts) +} + +// ProofMaturityDelaySeconds is a free data retrieval call binding the contract method 0xbf653a5c. +// +// Solidity: function proofMaturityDelaySeconds() view returns(uint256) +func (_OptimismPortal2 *OptimismPortal2CallerSession) ProofMaturityDelaySeconds() (*big.Int, error) { + return _OptimismPortal2.Contract.ProofMaturityDelaySeconds(&_OptimismPortal2.CallOpts) +} + +// ProofSubmitters is a free data retrieval call binding the contract method 0xa3860f48. +// +// Solidity: function proofSubmitters(bytes32 , uint256 ) view returns(address) +func (_OptimismPortal2 *OptimismPortal2Caller) ProofSubmitters(opts *bind.CallOpts, arg0 [32]byte, arg1 *big.Int) (common.Address, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "proofSubmitters", arg0, arg1) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ProofSubmitters is a free data retrieval call binding the contract method 0xa3860f48. +// +// Solidity: function proofSubmitters(bytes32 , uint256 ) view returns(address) +func (_OptimismPortal2 *OptimismPortal2Session) ProofSubmitters(arg0 [32]byte, arg1 *big.Int) (common.Address, error) { + return _OptimismPortal2.Contract.ProofSubmitters(&_OptimismPortal2.CallOpts, arg0, arg1) +} + +// ProofSubmitters is a free data retrieval call binding the contract method 0xa3860f48. +// +// Solidity: function proofSubmitters(bytes32 , uint256 ) view returns(address) +func (_OptimismPortal2 *OptimismPortal2CallerSession) ProofSubmitters(arg0 [32]byte, arg1 *big.Int) (common.Address, error) { + return _OptimismPortal2.Contract.ProofSubmitters(&_OptimismPortal2.CallOpts, arg0, arg1) +} + +// ProvenWithdrawals is a free data retrieval call binding the contract method 0xbb2c727e. +// +// Solidity: function provenWithdrawals(bytes32 , address ) view returns(address disputeGameProxy, uint64 timestamp) +func (_OptimismPortal2 *OptimismPortal2Caller) ProvenWithdrawals(opts *bind.CallOpts, arg0 [32]byte, arg1 common.Address) (struct { + DisputeGameProxy common.Address + Timestamp uint64 +}, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "provenWithdrawals", arg0, arg1) + + outstruct := new(struct { + DisputeGameProxy common.Address + Timestamp uint64 + }) + if err != nil { + return *outstruct, err + } + + outstruct.DisputeGameProxy = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Timestamp = *abi.ConvertType(out[1], new(uint64)).(*uint64) + + return *outstruct, err + +} + +// ProvenWithdrawals is a free data retrieval call binding the contract method 0xbb2c727e. +// +// Solidity: function provenWithdrawals(bytes32 , address ) view returns(address disputeGameProxy, uint64 timestamp) +func (_OptimismPortal2 *OptimismPortal2Session) ProvenWithdrawals(arg0 [32]byte, arg1 common.Address) (struct { + DisputeGameProxy common.Address + Timestamp uint64 +}, error) { + return _OptimismPortal2.Contract.ProvenWithdrawals(&_OptimismPortal2.CallOpts, arg0, arg1) +} + +// ProvenWithdrawals is a free data retrieval call binding the contract method 0xbb2c727e. +// +// Solidity: function provenWithdrawals(bytes32 , address ) view returns(address disputeGameProxy, uint64 timestamp) +func (_OptimismPortal2 *OptimismPortal2CallerSession) ProvenWithdrawals(arg0 [32]byte, arg1 common.Address) (struct { + DisputeGameProxy common.Address + Timestamp uint64 +}, error) { + return _OptimismPortal2.Contract.ProvenWithdrawals(&_OptimismPortal2.CallOpts, arg0, arg1) +} + +// RespectedGameType is a free data retrieval call binding the contract method 0x3c9f397c. +// +// Solidity: function respectedGameType() view returns(uint32) +func (_OptimismPortal2 *OptimismPortal2Caller) RespectedGameType(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "respectedGameType") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// RespectedGameType is a free data retrieval call binding the contract method 0x3c9f397c. +// +// Solidity: function respectedGameType() view returns(uint32) +func (_OptimismPortal2 *OptimismPortal2Session) RespectedGameType() (uint32, error) { + return _OptimismPortal2.Contract.RespectedGameType(&_OptimismPortal2.CallOpts) +} + +// RespectedGameType is a free data retrieval call binding the contract method 0x3c9f397c. +// +// Solidity: function respectedGameType() view returns(uint32) +func (_OptimismPortal2 *OptimismPortal2CallerSession) RespectedGameType() (uint32, error) { + return _OptimismPortal2.Contract.RespectedGameType(&_OptimismPortal2.CallOpts) +} + +// RespectedGameTypeUpdatedAt is a free data retrieval call binding the contract method 0x4fd0434c. +// +// Solidity: function respectedGameTypeUpdatedAt() view returns(uint64) +func (_OptimismPortal2 *OptimismPortal2Caller) RespectedGameTypeUpdatedAt(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "respectedGameTypeUpdatedAt") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// RespectedGameTypeUpdatedAt is a free data retrieval call binding the contract method 0x4fd0434c. +// +// Solidity: function respectedGameTypeUpdatedAt() view returns(uint64) +func (_OptimismPortal2 *OptimismPortal2Session) RespectedGameTypeUpdatedAt() (uint64, error) { + return _OptimismPortal2.Contract.RespectedGameTypeUpdatedAt(&_OptimismPortal2.CallOpts) +} + +// RespectedGameTypeUpdatedAt is a free data retrieval call binding the contract method 0x4fd0434c. +// +// Solidity: function respectedGameTypeUpdatedAt() view returns(uint64) +func (_OptimismPortal2 *OptimismPortal2CallerSession) RespectedGameTypeUpdatedAt() (uint64, error) { + return _OptimismPortal2.Contract.RespectedGameTypeUpdatedAt(&_OptimismPortal2.CallOpts) +} + +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_OptimismPortal2 *OptimismPortal2Caller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "superchainConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_OptimismPortal2 *OptimismPortal2Session) SuperchainConfig() (common.Address, error) { + return _OptimismPortal2.Contract.SuperchainConfig(&_OptimismPortal2.CallOpts) +} + +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_OptimismPortal2 *OptimismPortal2CallerSession) SuperchainConfig() (common.Address, error) { + return _OptimismPortal2.Contract.SuperchainConfig(&_OptimismPortal2.CallOpts) +} + +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_OptimismPortal2 *OptimismPortal2Caller) SystemConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "systemConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_OptimismPortal2 *OptimismPortal2Session) SystemConfig() (common.Address, error) { + return _OptimismPortal2.Contract.SystemConfig(&_OptimismPortal2.CallOpts) +} + +// SystemConfig is a free data retrieval call binding the contract method 0x33d7e2bd. +// +// Solidity: function systemConfig() view returns(address) +func (_OptimismPortal2 *OptimismPortal2CallerSession) SystemConfig() (common.Address, error) { + return _OptimismPortal2.Contract.SystemConfig(&_OptimismPortal2.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismPortal2 *OptimismPortal2Caller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismPortal2.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismPortal2 *OptimismPortal2Session) Version() (string, error) { + return _OptimismPortal2.Contract.Version(&_OptimismPortal2.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_OptimismPortal2 *OptimismPortal2CallerSession) Version() (string, error) { + return _OptimismPortal2.Contract.Version(&_OptimismPortal2.CallOpts) +} + +// BlacklistDisputeGame is a paid mutator transaction binding the contract method 0x7d6be8dc. +// +// Solidity: function blacklistDisputeGame(address _disputeGame) returns() +func (_OptimismPortal2 *OptimismPortal2Transactor) BlacklistDisputeGame(opts *bind.TransactOpts, _disputeGame common.Address) (*types.Transaction, error) { + return _OptimismPortal2.contract.Transact(opts, "blacklistDisputeGame", _disputeGame) +} + +// BlacklistDisputeGame is a paid mutator transaction binding the contract method 0x7d6be8dc. +// +// Solidity: function blacklistDisputeGame(address _disputeGame) returns() +func (_OptimismPortal2 *OptimismPortal2Session) BlacklistDisputeGame(_disputeGame common.Address) (*types.Transaction, error) { + return _OptimismPortal2.Contract.BlacklistDisputeGame(&_OptimismPortal2.TransactOpts, _disputeGame) +} + +// BlacklistDisputeGame is a paid mutator transaction binding the contract method 0x7d6be8dc. +// +// Solidity: function blacklistDisputeGame(address _disputeGame) returns() +func (_OptimismPortal2 *OptimismPortal2TransactorSession) BlacklistDisputeGame(_disputeGame common.Address) (*types.Transaction, error) { + return _OptimismPortal2.Contract.BlacklistDisputeGame(&_OptimismPortal2.TransactOpts, _disputeGame) +} + +// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. +// +// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() +func (_OptimismPortal2 *OptimismPortal2Transactor) DepositTransaction(opts *bind.TransactOpts, _to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { + return _OptimismPortal2.contract.Transact(opts, "depositTransaction", _to, _value, _gasLimit, _isCreation, _data) +} + +// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. +// +// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() +func (_OptimismPortal2 *OptimismPortal2Session) DepositTransaction(_to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { + return _OptimismPortal2.Contract.DepositTransaction(&_OptimismPortal2.TransactOpts, _to, _value, _gasLimit, _isCreation, _data) +} + +// DepositTransaction is a paid mutator transaction binding the contract method 0xe9e05c42. +// +// Solidity: function depositTransaction(address _to, uint256 _value, uint64 _gasLimit, bool _isCreation, bytes _data) payable returns() +func (_OptimismPortal2 *OptimismPortal2TransactorSession) DepositTransaction(_to common.Address, _value *big.Int, _gasLimit uint64, _isCreation bool, _data []byte) (*types.Transaction, error) { + return _OptimismPortal2.Contract.DepositTransaction(&_OptimismPortal2.TransactOpts, _to, _value, _gasLimit, _isCreation, _data) +} + +// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. +// +// Solidity: function donateETH() payable returns() +func (_OptimismPortal2 *OptimismPortal2Transactor) DonateETH(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismPortal2.contract.Transact(opts, "donateETH") +} + +// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. +// +// Solidity: function donateETH() payable returns() +func (_OptimismPortal2 *OptimismPortal2Session) DonateETH() (*types.Transaction, error) { + return _OptimismPortal2.Contract.DonateETH(&_OptimismPortal2.TransactOpts) +} + +// DonateETH is a paid mutator transaction binding the contract method 0x8b4c40b0. +// +// Solidity: function donateETH() payable returns() +func (_OptimismPortal2 *OptimismPortal2TransactorSession) DonateETH() (*types.Transaction, error) { + return _OptimismPortal2.Contract.DonateETH(&_OptimismPortal2.TransactOpts) +} + +// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. +// +// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() +func (_OptimismPortal2 *OptimismPortal2Transactor) FinalizeWithdrawalTransaction(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction) (*types.Transaction, error) { + return _OptimismPortal2.contract.Transact(opts, "finalizeWithdrawalTransaction", _tx) +} + +// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. +// +// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() +func (_OptimismPortal2 *OptimismPortal2Session) FinalizeWithdrawalTransaction(_tx TypesWithdrawalTransaction) (*types.Transaction, error) { + return _OptimismPortal2.Contract.FinalizeWithdrawalTransaction(&_OptimismPortal2.TransactOpts, _tx) +} + +// FinalizeWithdrawalTransaction is a paid mutator transaction binding the contract method 0x8c3152e9. +// +// Solidity: function finalizeWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx) returns() +func (_OptimismPortal2 *OptimismPortal2TransactorSession) FinalizeWithdrawalTransaction(_tx TypesWithdrawalTransaction) (*types.Transaction, error) { + return _OptimismPortal2.Contract.FinalizeWithdrawalTransaction(&_OptimismPortal2.TransactOpts, _tx) +} + +// FinalizeWithdrawalTransactionExternalProof is a paid mutator transaction binding the contract method 0x43ca1c50. +// +// Solidity: function finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes) _tx, address _proofSubmitter) returns() +func (_OptimismPortal2 *OptimismPortal2Transactor) FinalizeWithdrawalTransactionExternalProof(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction, _proofSubmitter common.Address) (*types.Transaction, error) { + return _OptimismPortal2.contract.Transact(opts, "finalizeWithdrawalTransactionExternalProof", _tx, _proofSubmitter) +} + +// FinalizeWithdrawalTransactionExternalProof is a paid mutator transaction binding the contract method 0x43ca1c50. +// +// Solidity: function finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes) _tx, address _proofSubmitter) returns() +func (_OptimismPortal2 *OptimismPortal2Session) FinalizeWithdrawalTransactionExternalProof(_tx TypesWithdrawalTransaction, _proofSubmitter common.Address) (*types.Transaction, error) { + return _OptimismPortal2.Contract.FinalizeWithdrawalTransactionExternalProof(&_OptimismPortal2.TransactOpts, _tx, _proofSubmitter) +} + +// FinalizeWithdrawalTransactionExternalProof is a paid mutator transaction binding the contract method 0x43ca1c50. +// +// Solidity: function finalizeWithdrawalTransactionExternalProof((uint256,address,address,uint256,uint256,bytes) _tx, address _proofSubmitter) returns() +func (_OptimismPortal2 *OptimismPortal2TransactorSession) FinalizeWithdrawalTransactionExternalProof(_tx TypesWithdrawalTransaction, _proofSubmitter common.Address) (*types.Transaction, error) { + return _OptimismPortal2.Contract.FinalizeWithdrawalTransactionExternalProof(&_OptimismPortal2.TransactOpts, _tx, _proofSubmitter) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8e819e54. +// +// Solidity: function initialize(address _disputeGameFactory, address _systemConfig, address _superchainConfig, uint32 _initialRespectedGameType) returns() +func (_OptimismPortal2 *OptimismPortal2Transactor) Initialize(opts *bind.TransactOpts, _disputeGameFactory common.Address, _systemConfig common.Address, _superchainConfig common.Address, _initialRespectedGameType uint32) (*types.Transaction, error) { + return _OptimismPortal2.contract.Transact(opts, "initialize", _disputeGameFactory, _systemConfig, _superchainConfig, _initialRespectedGameType) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8e819e54. +// +// Solidity: function initialize(address _disputeGameFactory, address _systemConfig, address _superchainConfig, uint32 _initialRespectedGameType) returns() +func (_OptimismPortal2 *OptimismPortal2Session) Initialize(_disputeGameFactory common.Address, _systemConfig common.Address, _superchainConfig common.Address, _initialRespectedGameType uint32) (*types.Transaction, error) { + return _OptimismPortal2.Contract.Initialize(&_OptimismPortal2.TransactOpts, _disputeGameFactory, _systemConfig, _superchainConfig, _initialRespectedGameType) +} + +// Initialize is a paid mutator transaction binding the contract method 0x8e819e54. +// +// Solidity: function initialize(address _disputeGameFactory, address _systemConfig, address _superchainConfig, uint32 _initialRespectedGameType) returns() +func (_OptimismPortal2 *OptimismPortal2TransactorSession) Initialize(_disputeGameFactory common.Address, _systemConfig common.Address, _superchainConfig common.Address, _initialRespectedGameType uint32) (*types.Transaction, error) { + return _OptimismPortal2.Contract.Initialize(&_OptimismPortal2.TransactOpts, _disputeGameFactory, _systemConfig, _superchainConfig, _initialRespectedGameType) +} + +// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. +// +// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _disputeGameIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() +func (_OptimismPortal2 *OptimismPortal2Transactor) ProveWithdrawalTransaction(opts *bind.TransactOpts, _tx TypesWithdrawalTransaction, _disputeGameIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { + return _OptimismPortal2.contract.Transact(opts, "proveWithdrawalTransaction", _tx, _disputeGameIndex, _outputRootProof, _withdrawalProof) +} + +// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. +// +// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _disputeGameIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() +func (_OptimismPortal2 *OptimismPortal2Session) ProveWithdrawalTransaction(_tx TypesWithdrawalTransaction, _disputeGameIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { + return _OptimismPortal2.Contract.ProveWithdrawalTransaction(&_OptimismPortal2.TransactOpts, _tx, _disputeGameIndex, _outputRootProof, _withdrawalProof) +} + +// ProveWithdrawalTransaction is a paid mutator transaction binding the contract method 0x4870496f. +// +// Solidity: function proveWithdrawalTransaction((uint256,address,address,uint256,uint256,bytes) _tx, uint256 _disputeGameIndex, (bytes32,bytes32,bytes32,bytes32) _outputRootProof, bytes[] _withdrawalProof) returns() +func (_OptimismPortal2 *OptimismPortal2TransactorSession) ProveWithdrawalTransaction(_tx TypesWithdrawalTransaction, _disputeGameIndex *big.Int, _outputRootProof TypesOutputRootProof, _withdrawalProof [][]byte) (*types.Transaction, error) { + return _OptimismPortal2.Contract.ProveWithdrawalTransaction(&_OptimismPortal2.TransactOpts, _tx, _disputeGameIndex, _outputRootProof, _withdrawalProof) +} + +// SetRespectedGameType is a paid mutator transaction binding the contract method 0x7fc48504. +// +// Solidity: function setRespectedGameType(uint32 _gameType) returns() +func (_OptimismPortal2 *OptimismPortal2Transactor) SetRespectedGameType(opts *bind.TransactOpts, _gameType uint32) (*types.Transaction, error) { + return _OptimismPortal2.contract.Transact(opts, "setRespectedGameType", _gameType) +} + +// SetRespectedGameType is a paid mutator transaction binding the contract method 0x7fc48504. +// +// Solidity: function setRespectedGameType(uint32 _gameType) returns() +func (_OptimismPortal2 *OptimismPortal2Session) SetRespectedGameType(_gameType uint32) (*types.Transaction, error) { + return _OptimismPortal2.Contract.SetRespectedGameType(&_OptimismPortal2.TransactOpts, _gameType) +} + +// SetRespectedGameType is a paid mutator transaction binding the contract method 0x7fc48504. +// +// Solidity: function setRespectedGameType(uint32 _gameType) returns() +func (_OptimismPortal2 *OptimismPortal2TransactorSession) SetRespectedGameType(_gameType uint32) (*types.Transaction, error) { + return _OptimismPortal2.Contract.SetRespectedGameType(&_OptimismPortal2.TransactOpts, _gameType) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_OptimismPortal2 *OptimismPortal2Transactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismPortal2.contract.RawTransact(opts, nil) // calldata is disallowed for receive function +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_OptimismPortal2 *OptimismPortal2Session) Receive() (*types.Transaction, error) { + return _OptimismPortal2.Contract.Receive(&_OptimismPortal2.TransactOpts) +} + +// Receive is a paid mutator transaction binding the contract receive function. +// +// Solidity: receive() payable returns() +func (_OptimismPortal2 *OptimismPortal2TransactorSession) Receive() (*types.Transaction, error) { + return _OptimismPortal2.Contract.Receive(&_OptimismPortal2.TransactOpts) +} + +// OptimismPortal2InitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the OptimismPortal2 contract. +type OptimismPortal2InitializedIterator struct { + Event *OptimismPortal2Initialized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismPortal2InitializedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismPortal2Initialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismPortal2Initialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismPortal2InitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismPortal2InitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismPortal2Initialized represents a Initialized event raised by the OptimismPortal2 contract. +type OptimismPortal2Initialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_OptimismPortal2 *OptimismPortal2Filterer) FilterInitialized(opts *bind.FilterOpts) (*OptimismPortal2InitializedIterator, error) { + + logs, sub, err := _OptimismPortal2.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &OptimismPortal2InitializedIterator{contract: _OptimismPortal2.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_OptimismPortal2 *OptimismPortal2Filterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *OptimismPortal2Initialized) (event.Subscription, error) { + + logs, sub, err := _OptimismPortal2.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismPortal2Initialized) + if err := _OptimismPortal2.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_OptimismPortal2 *OptimismPortal2Filterer) ParseInitialized(log types.Log) (*OptimismPortal2Initialized, error) { + event := new(OptimismPortal2Initialized) + if err := _OptimismPortal2.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismPortal2TransactionDepositedIterator is returned from FilterTransactionDeposited and is used to iterate over the raw logs and unpacked data for TransactionDeposited events raised by the OptimismPortal2 contract. +type OptimismPortal2TransactionDepositedIterator struct { + Event *OptimismPortal2TransactionDeposited // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismPortal2TransactionDepositedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismPortal2TransactionDeposited) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismPortal2TransactionDeposited) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismPortal2TransactionDepositedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismPortal2TransactionDepositedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismPortal2TransactionDeposited represents a TransactionDeposited event raised by the OptimismPortal2 contract. +type OptimismPortal2TransactionDeposited struct { + From common.Address + To common.Address + Version *big.Int + OpaqueData []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterTransactionDeposited is a free log retrieval operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. +// +// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) +func (_OptimismPortal2 *OptimismPortal2Filterer) FilterTransactionDeposited(opts *bind.FilterOpts, from []common.Address, to []common.Address, version []*big.Int) (*OptimismPortal2TransactionDepositedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + + logs, sub, err := _OptimismPortal2.contract.FilterLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule) + if err != nil { + return nil, err + } + return &OptimismPortal2TransactionDepositedIterator{contract: _OptimismPortal2.contract, event: "TransactionDeposited", logs: logs, sub: sub}, nil +} + +// WatchTransactionDeposited is a free log subscription operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. +// +// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) +func (_OptimismPortal2 *OptimismPortal2Filterer) WatchTransactionDeposited(opts *bind.WatchOpts, sink chan<- *OptimismPortal2TransactionDeposited, from []common.Address, to []common.Address, version []*big.Int) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + + logs, sub, err := _OptimismPortal2.contract.WatchLogs(opts, "TransactionDeposited", fromRule, toRule, versionRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismPortal2TransactionDeposited) + if err := _OptimismPortal2.contract.UnpackLog(event, "TransactionDeposited", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseTransactionDeposited is a log parse operation binding the contract event 0xb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32. +// +// Solidity: event TransactionDeposited(address indexed from, address indexed to, uint256 indexed version, bytes opaqueData) +func (_OptimismPortal2 *OptimismPortal2Filterer) ParseTransactionDeposited(log types.Log) (*OptimismPortal2TransactionDeposited, error) { + event := new(OptimismPortal2TransactionDeposited) + if err := _OptimismPortal2.contract.UnpackLog(event, "TransactionDeposited", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismPortal2WithdrawalFinalizedIterator is returned from FilterWithdrawalFinalized and is used to iterate over the raw logs and unpacked data for WithdrawalFinalized events raised by the OptimismPortal2 contract. +type OptimismPortal2WithdrawalFinalizedIterator struct { + Event *OptimismPortal2WithdrawalFinalized // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismPortal2WithdrawalFinalizedIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismPortal2WithdrawalFinalized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismPortal2WithdrawalFinalized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismPortal2WithdrawalFinalizedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismPortal2WithdrawalFinalizedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismPortal2WithdrawalFinalized represents a WithdrawalFinalized event raised by the OptimismPortal2 contract. +type OptimismPortal2WithdrawalFinalized struct { + WithdrawalHash [32]byte + Success bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalFinalized is a free log retrieval operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. +// +// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) +func (_OptimismPortal2 *OptimismPortal2Filterer) FilterWithdrawalFinalized(opts *bind.FilterOpts, withdrawalHash [][32]byte) (*OptimismPortal2WithdrawalFinalizedIterator, error) { + + var withdrawalHashRule []interface{} + for _, withdrawalHashItem := range withdrawalHash { + withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) + } + + logs, sub, err := _OptimismPortal2.contract.FilterLogs(opts, "WithdrawalFinalized", withdrawalHashRule) + if err != nil { + return nil, err + } + return &OptimismPortal2WithdrawalFinalizedIterator{contract: _OptimismPortal2.contract, event: "WithdrawalFinalized", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalFinalized is a free log subscription operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. +// +// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) +func (_OptimismPortal2 *OptimismPortal2Filterer) WatchWithdrawalFinalized(opts *bind.WatchOpts, sink chan<- *OptimismPortal2WithdrawalFinalized, withdrawalHash [][32]byte) (event.Subscription, error) { + + var withdrawalHashRule []interface{} + for _, withdrawalHashItem := range withdrawalHash { + withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) + } + + logs, sub, err := _OptimismPortal2.contract.WatchLogs(opts, "WithdrawalFinalized", withdrawalHashRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismPortal2WithdrawalFinalized) + if err := _OptimismPortal2.contract.UnpackLog(event, "WithdrawalFinalized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawalFinalized is a log parse operation binding the contract event 0xdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b. +// +// Solidity: event WithdrawalFinalized(bytes32 indexed withdrawalHash, bool success) +func (_OptimismPortal2 *OptimismPortal2Filterer) ParseWithdrawalFinalized(log types.Log) (*OptimismPortal2WithdrawalFinalized, error) { + event := new(OptimismPortal2WithdrawalFinalized) + if err := _OptimismPortal2.contract.UnpackLog(event, "WithdrawalFinalized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// OptimismPortal2WithdrawalProvenIterator is returned from FilterWithdrawalProven and is used to iterate over the raw logs and unpacked data for WithdrawalProven events raised by the OptimismPortal2 contract. +type OptimismPortal2WithdrawalProvenIterator struct { + Event *OptimismPortal2WithdrawalProven // Event containing the contract specifics and raw log + + contract *bind.BoundContract // Generic contract to use for unpacking event data + event string // Event name to use for unpacking event data + + logs chan types.Log // Log channel receiving the found contract events + sub ethereum.Subscription // Subscription for errors, completion and termination + done bool // Whether the subscription completed delivering logs + fail error // Occurred error to stop iteration +} + +// Next advances the iterator to the subsequent event, returning whether there +// are any more events found. In case of a retrieval or parsing error, false is +// returned and Error() can be queried for the exact failure. +func (it *OptimismPortal2WithdrawalProvenIterator) Next() bool { + // If the iterator failed, stop iterating + if it.fail != nil { + return false + } + // If the iterator completed, deliver directly whatever's available + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismPortal2WithdrawalProven) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + // Iterator still in progress, wait for either a data or an error event + select { + case log := <-it.logs: + it.Event = new(OptimismPortal2WithdrawalProven) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +// Error returns any retrieval or parsing error occurred during filtering. +func (it *OptimismPortal2WithdrawalProvenIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *OptimismPortal2WithdrawalProvenIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// OptimismPortal2WithdrawalProven represents a WithdrawalProven event raised by the OptimismPortal2 contract. +type OptimismPortal2WithdrawalProven struct { + WithdrawalHash [32]byte + From common.Address + To common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterWithdrawalProven is a free log retrieval operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. +// +// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) +func (_OptimismPortal2 *OptimismPortal2Filterer) FilterWithdrawalProven(opts *bind.FilterOpts, withdrawalHash [][32]byte, from []common.Address, to []common.Address) (*OptimismPortal2WithdrawalProvenIterator, error) { + + var withdrawalHashRule []interface{} + for _, withdrawalHashItem := range withdrawalHash { + withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismPortal2.contract.FilterLogs(opts, "WithdrawalProven", withdrawalHashRule, fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismPortal2WithdrawalProvenIterator{contract: _OptimismPortal2.contract, event: "WithdrawalProven", logs: logs, sub: sub}, nil +} + +// WatchWithdrawalProven is a free log subscription operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. +// +// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) +func (_OptimismPortal2 *OptimismPortal2Filterer) WatchWithdrawalProven(opts *bind.WatchOpts, sink chan<- *OptimismPortal2WithdrawalProven, withdrawalHash [][32]byte, from []common.Address, to []common.Address) (event.Subscription, error) { + + var withdrawalHashRule []interface{} + for _, withdrawalHashItem := range withdrawalHash { + withdrawalHashRule = append(withdrawalHashRule, withdrawalHashItem) + } + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismPortal2.contract.WatchLogs(opts, "WithdrawalProven", withdrawalHashRule, fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + // New log arrived, parse the event and forward to the user + event := new(OptimismPortal2WithdrawalProven) + if err := _OptimismPortal2.contract.UnpackLog(event, "WithdrawalProven", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +// ParseWithdrawalProven is a log parse operation binding the contract event 0x67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f62. +// +// Solidity: event WithdrawalProven(bytes32 indexed withdrawalHash, address indexed from, address indexed to) +func (_OptimismPortal2 *OptimismPortal2Filterer) ParseWithdrawalProven(log types.Log) (*OptimismPortal2WithdrawalProven, error) { + event := new(OptimismPortal2WithdrawalProven) + if err := _OptimismPortal2.contract.UnpackLog(event, "WithdrawalProven", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} From fe550996a243ec529b4b65631f4d5fd1655627ff Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 30 Apr 2024 18:51:41 -0600 Subject: [PATCH 25/45] weth: remove weth9 Migrate to WETH based on weth98 --- packages/contracts-bedrock/foundry.toml | 1 - .../snapshots/abi/WETH9.json | 286 ------- .../snapshots/storageLayout/WETH9.json | 37 - .../contracts-bedrock/src/vendor/WETH9.sol | 756 ------------------ 4 files changed, 1080 deletions(-) delete mode 100644 packages/contracts-bedrock/snapshots/abi/WETH9.json delete mode 100644 packages/contracts-bedrock/snapshots/storageLayout/WETH9.json delete mode 100644 packages/contracts-bedrock/src/vendor/WETH9.sol diff --git a/packages/contracts-bedrock/foundry.toml b/packages/contracts-bedrock/foundry.toml index 0f3f8540934..eaed71ce82f 100644 --- a/packages/contracts-bedrock/foundry.toml +++ b/packages/contracts-bedrock/foundry.toml @@ -52,7 +52,6 @@ line_length=120 multiline_func_header='all' bracket_spacing=true wrap_comments=true -ignore = ['src/vendor/WETH9.sol'] ################################################################ # PROFILE: CI # diff --git a/packages/contracts-bedrock/snapshots/abi/WETH9.json b/packages/contracts-bedrock/snapshots/abi/WETH9.json deleted file mode 100644 index f2a38a109e8..00000000000 --- a/packages/contracts-bedrock/snapshots/abi/WETH9.json +++ /dev/null @@ -1,286 +0,0 @@ -[ - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "guy", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Deposit", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "wad", - "type": "uint256" - } - ], - "name": "Withdrawal", - "type": "event" - } -] \ No newline at end of file diff --git a/packages/contracts-bedrock/snapshots/storageLayout/WETH9.json b/packages/contracts-bedrock/snapshots/storageLayout/WETH9.json deleted file mode 100644 index ae4f958c6d3..00000000000 --- a/packages/contracts-bedrock/snapshots/storageLayout/WETH9.json +++ /dev/null @@ -1,37 +0,0 @@ -[ - { - "bytes": "32", - "label": "name", - "offset": 0, - "slot": "0", - "type": "string" - }, - { - "bytes": "32", - "label": "symbol", - "offset": 0, - "slot": "1", - "type": "string" - }, - { - "bytes": "1", - "label": "decimals", - "offset": 0, - "slot": "2", - "type": "uint8" - }, - { - "bytes": "32", - "label": "balanceOf", - "offset": 0, - "slot": "3", - "type": "mapping(address => uint256)" - }, - { - "bytes": "32", - "label": "allowance", - "offset": 0, - "slot": "4", - "type": "mapping(address => mapping(address => uint256))" - } -] \ No newline at end of file diff --git a/packages/contracts-bedrock/src/vendor/WETH9.sol b/packages/contracts-bedrock/src/vendor/WETH9.sol deleted file mode 100644 index 7bb4ab4dde5..00000000000 --- a/packages/contracts-bedrock/src/vendor/WETH9.sol +++ /dev/null @@ -1,756 +0,0 @@ -// Copyright (C) 2015, 2016, 2017 Dapphub - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -pragma solidity >=0.4.22 <0.6; - -contract WETH9 { - string public name = "Wrapped Ether"; - string public symbol = "WETH"; - uint8 public decimals = 18; - - event Approval(address indexed src, address indexed guy, uint wad); - event Transfer(address indexed src, address indexed dst, uint wad); - event Deposit(address indexed dst, uint wad); - event Withdrawal(address indexed src, uint wad); - - mapping (address => uint) public balanceOf; - mapping (address => mapping (address => uint)) public allowance; - - function() external payable { - deposit(); - } - function deposit() public payable { - balanceOf[msg.sender] += msg.value; - emit Deposit(msg.sender, msg.value); - } - function withdraw(uint wad) public { - require(balanceOf[msg.sender] >= wad); - balanceOf[msg.sender] -= wad; - msg.sender.transfer(wad); - emit Withdrawal(msg.sender, wad); - } - - function totalSupply() public view returns (uint) { - return address(this).balance; - } - - function approve(address guy, uint wad) public returns (bool) { - allowance[msg.sender][guy] = wad; - emit Approval(msg.sender, guy, wad); - return true; - } - - function transfer(address dst, uint wad) public returns (bool) { - return transferFrom(msg.sender, dst, wad); - } - - function transferFrom(address src, address dst, uint wad) - public - returns (bool) - { - require(balanceOf[src] >= wad); - - if (src != msg.sender && allowance[src][msg.sender] != uint(-1)) { - require(allowance[src][msg.sender] >= wad); - allowance[src][msg.sender] -= wad; - } - - balanceOf[src] -= wad; - balanceOf[dst] += wad; - - emit Transfer(src, dst, wad); - - return true; - } -} - - -/* - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - -*/ From 7e1a17c01e090361d85a661b21dfe25f87fb758f Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 30 Apr 2024 19:07:28 -0600 Subject: [PATCH 26/45] contracts-bedrock: cleanup --- .../src/L1/L1CrossDomainMessenger.sol | 4 ++-- .../src/L1/L1StandardBridge.sol | 4 ++-- .../src/L1/OptimismPortal.sol | 20 ++++++++++--------- .../contracts-bedrock/src/L1/SystemConfig.sol | 4 ++-- packages/contracts-bedrock/src/L2/L1Block.sol | 2 +- .../src/L2/L2CrossDomainMessenger.sol | 4 ++-- .../src/L2/L2StandardBridge.sol | 4 ++-- .../src/libraries/Constants.sol | 6 +++++- 8 files changed, 27 insertions(+), 21 deletions(-) diff --git a/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol index 931e65bbb32..4aaf2bd3115 100644 --- a/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L1/L1CrossDomainMessenger.sol @@ -25,8 +25,8 @@ contract L1CrossDomainMessenger is CrossDomainMessenger, ISemver { SystemConfig public systemConfig; /// @notice Semantic version. - /// @custom:semver 2.4.0-beta+custom-gas-token - string public constant version = "2.4.0-beta+custom-gas-token"; + /// @custom:semver 2.4.0 + string public constant version = "2.4.0"; /// @notice Constructs the L1CrossDomainMessenger contract. constructor() CrossDomainMessenger() { diff --git a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol index 2acd2ace4ac..a620a45a0f2 100644 --- a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol +++ b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol @@ -72,8 +72,8 @@ contract L1StandardBridge is StandardBridge, ISemver { ); /// @notice Semantic version. - /// @custom:semver 2.2.0-beta+custom-gas-token - string public constant version = "2.2.0-beta+custom-gas-token"; + /// @custom:semver 2.2.0 + string public constant version = "2.2.0"; /// @notice Address of the SuperchainConfig contract. SuperchainConfig public superchainConfig; diff --git a/packages/contracts-bedrock/src/L1/OptimismPortal.sol b/packages/contracts-bedrock/src/L1/OptimismPortal.sol index 56b76b0cb9d..1d7864fdb21 100644 --- a/packages/contracts-bedrock/src/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/src/L1/OptimismPortal.sol @@ -91,9 +91,11 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { /// @notice Spacer for backwards compatibility. bytes32 private spacer_60_0_32; - /// @notice The total amount of gas paying asset in the L2. Incremented on deposits and - /// decremented on withdrawals. Mey be larger than the amount of gas paying asset - /// for L2s that use ether to buy gas. + /// @notice Represents the amount of native asset minted in L2. This may not + /// be 100% accurate due to the ability to send ether to the contract + /// without triggering a deposit transaction. It also is used to prevent + /// overflows for L2 account balances when custom gas tokens are used. + /// It is not safe to trust `ERC20.balanceOf` as it may lie. uint256 internal _balance; /// @notice Emitted when a transaction is deposited from L1 to L2. @@ -123,8 +125,8 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { } /// @notice Semantic version. - /// @custom:semver 2.7.0-beta+custom-gas-token - string public constant version = "2.7.0-beta+custom-gas-token"; + /// @custom:semver 2.7.0 + string public constant version = "2.7.0"; /// @notice Constructs the OptimismPortal contract. constructor() { @@ -156,7 +158,7 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { __ResourceMetering_init(); } - /// @notice Getter for the balance. + /// @notice Getter for the balance of the contract. function balance() public view returns (uint256) { (address token,) = gasPayingToken(); if (token == Constants.ETHER) { @@ -207,7 +209,7 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { } /// @notice Returns the gas paying token and its decimals. - function gasPayingToken() public view returns (address addr_, uint8 decimals_) { + function gasPayingToken() internal view returns (address addr_, uint8 decimals_) { (addr_, decimals_) = systemConfig.gasPayingToken(); } @@ -553,13 +555,13 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) external { if (msg.sender != address(systemConfig)) revert Unauthorized(); - // Set L2 deposit gas as used without paying burning gas. Ensures that desposits cannot use too much L2 gas. + // Set L2 deposit gas as used without paying burning gas. Ensures that deposits cannot use too much L2 gas. useGas(80000); // Emit the special deposit transaction directly that sets the gas paying // token in the L1Block predeploy contract. emit TransactionDeposited( - 0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001, + Constants.DEPOSITOR_ACCOUNT, Predeploys.L1_BLOCK_ATTRIBUTES, DEPOSIT_VERSION, abi.encodePacked( diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 9bce81238c3..9e4d94dc18a 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -110,8 +110,8 @@ contract SystemConfig is OwnableUpgradeable, ISemver, IGasToken { event ConfigUpdate(uint256 indexed version, UpdateType indexed updateType, bytes data); /// @notice Semantic version. - /// @custom:semver 2.1.0-beta+custom-gas-token - string public constant version = "2.1.0-beta+custom-gas-token"; + /// @custom:semver 2.1.0 + string public constant version = "2.1.0"; /// @notice Constructs the SystemConfig contract. Cannot set /// the owner to `address(0)` due to the Ownable contract's diff --git a/packages/contracts-bedrock/src/L2/L1Block.sol b/packages/contracts-bedrock/src/L2/L1Block.sol index bbd79bb97d7..c8dee6424f0 100644 --- a/packages/contracts-bedrock/src/L2/L1Block.sol +++ b/packages/contracts-bedrock/src/L2/L1Block.sol @@ -21,7 +21,7 @@ contract L1Block is ISemver, IGasToken { event GasPayingTokenSet(address indexed token, uint8 indexed decimals, bytes32 name, bytes32 symbol); /// @notice Address of the special depositor account. - address public constant DEPOSITOR_ACCOUNT = 0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001; + address public constant DEPOSITOR_ACCOUNT = Constants.DEPOSITOR_ACCOUNT; /// @notice The latest L1 block number known by the L2 system. uint64 public number; diff --git a/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol b/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol index 48e78063402..d504b2d40d3 100644 --- a/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/L2/L2CrossDomainMessenger.sol @@ -17,8 +17,8 @@ import { Predeploys } from "src/libraries/Predeploys.sol"; /// L2 on the L2 side. Users are generally encouraged to use this contract instead of lower /// level message passing contracts. contract L2CrossDomainMessenger is CrossDomainMessenger, ISemver { - /// @custom:semver 2.1.0-beta+custom-gas-token - string public constant version = "2.1.0-beta+custom-gas-token"; + /// @custom:semver 2.1.0 + string public constant version = "2.1.0"; /// @notice Constructs the L2CrossDomainMessenger contract. constructor() CrossDomainMessenger() { diff --git a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol index 0a1928994e7..d001a540a42 100644 --- a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol +++ b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol @@ -52,8 +52,8 @@ contract L2StandardBridge is StandardBridge, ISemver { bytes extraData ); - /// @custom:semver 1.9.0-beta+custom-gas-token - string public constant version = "1.9.0-beta+custom-gas-token"; + /// @custom:semver 1.9.0 + string public constant version = "1.9.0"; /// @notice Constructs the L2StandardBridge contract. constructor() StandardBridge() { diff --git a/packages/contracts-bedrock/src/libraries/Constants.sol b/packages/contracts-bedrock/src/libraries/Constants.sol index e51509ffd41..e86010421d3 100644 --- a/packages/contracts-bedrock/src/libraries/Constants.sol +++ b/packages/contracts-bedrock/src/libraries/Constants.sol @@ -31,7 +31,11 @@ library Constants { bytes32 internal constant PROXY_OWNER_ADDRESS = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; /// @notice The address that represents ether when dealing with ERC20 token addresses. - address internal constant ETHER = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); + address internal constant ETHER = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; + + /// @notice The address that represents the system caller responsible for L1 attributes + /// transactions. + address internal constant DEPOSITOR_ACCOUNT = 0xDeaDDEaDDeAdDeAdDEAdDEaddeAddEAdDEAd0001; /// @notice Returns the default values for the ResourceConfig. These are the recommended values /// for a production network. From 6a6c4be3f8ec5995f2d4b0fdb452dce205820335 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 30 Apr 2024 19:22:53 -0600 Subject: [PATCH 27/45] custom-gas-token: more cleanup Fix abi --- packages/contracts-bedrock/semver-lock.json | 32 +- .../snapshots/abi/L1Block.json | 4 +- .../snapshots/abi/L1BlockInterop.json | 4 +- .../snapshots/abi/OptimismPortal.json | 18 - .../snapshots/state-diff/Kontrol-Deploy.json | 604 +++++++++--------- packages/contracts-bedrock/src/L2/L1Block.sol | 11 +- .../src/L2/L1BlockInterop.sol | 3 +- .../test/L1/OptimismPortal.t.sol | 27 +- .../proofs/utils/DeploymentSummary.sol | 16 +- .../proofs/utils/DeploymentSummaryCode.sol | 8 +- 10 files changed, 346 insertions(+), 381 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index b0e71c9eb32..67bf5248aeb 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -16,24 +16,24 @@ "sourceCodeHash": "0xc59b8574531162e016d7342aeb6e79d05574e90dbea6c0e5ede35b65010ad894" }, "src/L1/L1CrossDomainMessenger.sol": { - "initCodeHash": "0xedf049d217216814c682ceeea83cd927210cc4baeba9ef0a3d5c574f0976d877", - "sourceCodeHash": "0x9ba02de96bc5cb51e85c624d58d0eb331d5dee8b94e01c24bcc94ac0692c538e" + "initCodeHash": "0xff2c621c5ae8f1190779b13d8da4ee9fcd64f202d6e5ee309f0028bca17a8b8f", + "sourceCodeHash": "0x56a2d3abed97eb7b292db758aac1e36fc08a12bfa44f7969824e26866a1417fa" }, "src/L1/L1ERC721Bridge.sol": { "initCodeHash": "0xec73b46e68ea29298707f7b9709e7948afe303907b6c4e8b161e2ded2c85ee9c", "sourceCodeHash": "0xd57acdbd001941e75cf4326ba7c1bdad809912f10b1e44ffaebe073917cdd296" }, "src/L1/L1StandardBridge.sol": { - "initCodeHash": "0xd34d706a9ea16a31728e32b36cb7a2316d30fe0bcaa04e6ebad4cfc53ac4e86d", - "sourceCodeHash": "0xd12449d181369d719a56694188f74be45df2d6d32847f02ca17603f73068dac1" + "initCodeHash": "0xa00156c877db0317663816dfa1ae124088e3620c0f1bc6ebfb41bf79c6df07dd", + "sourceCodeHash": "0x20cab6f2c61695d682be5a397dce471232dc19e729366430aa721c6afb74e71d" }, "src/L1/L2OutputOracle.sol": { "initCodeHash": "0x14c3a582ca46ef2a6abad5590323f4de26ff4de54415c927c62e131ccbf8d9ba", "sourceCodeHash": "0xf5fcf570721e25459fadbb37e02f9efe349e1c8afcbf1e3b5fdb09c9f612cdc0" }, "src/L1/OptimismPortal.sol": { - "initCodeHash": "0xd243c33956b8ecdbcdddfa4e4bb3872efd31e31f5900463c335a1623afd926ab", - "sourceCodeHash": "0xdc724dd1af6a5db2c3c392600818d5b9cc03d9273df05e84a410c441073de9ba" + "initCodeHash": "0xd17e50769a1cb38e435c5a52d660da941c4d45a5bfd777acb263aed2557e9d2f", + "sourceCodeHash": "0xbf373db66aea67f8091f162e9995f96abcc8c5220de65736efa269a1710d0025" }, "src/L1/OptimismPortal2.sol": { "initCodeHash": "0xea32d79e8297956d4f9a4c7985bb53ff8bb3735e5b307d4e118fea71f503a38e", @@ -48,8 +48,8 @@ "sourceCodeHash": "0xd6a894e371c2c7182b5960c507491f81c3775dda0efedd29475f7c30ca07b004" }, "src/L1/SystemConfig.sol": { - "initCodeHash": "0x998884f4420c3bbfa79f809c0ae3a106e160dbdce45d9674b60c70d16c36087f", - "sourceCodeHash": "0x5e851492c6c39974123f7b6514466288868f68ec1a97ba7ee90256467caf15a7" + "initCodeHash": "0xace1ef0e25a5416a686c7555acd20e9b0191ab2a8c8320d57606ed12092ccbb6", + "sourceCodeHash": "0x1f35f55aa230a686f6457e42bd08acc8bd94d691f89ac23a4b2efd7cc1eefdc6" }, "src/L2/BaseFeeVault.sol": { "initCodeHash": "0x2744d34573be83206d1b75d049d18a7bb37f9058e68c0803e5008c46b0dc2474", @@ -64,28 +64,28 @@ "sourceCodeHash": "0xde06becce9514f46ba78b4cb0732c7a714d49ba8f131258d56a5f5b22b51be7e" }, "src/L2/L1Block.sol": { - "initCodeHash": "0x6203eea328565c2dff822ce3d5fd0f3cf0aaba214b8e19e319ceca728f731d57", - "sourceCodeHash": "0x9a3b09dd199b1294db9efcc7243f514111563cf0d5681fbaa216b6f0f0b27bd1" + "initCodeHash": "0x00961e82f3ed7f7755115c897304063e283bff0bed1200d50e0abe5c59424069", + "sourceCodeHash": "0x9a68dd1bb833ebe1b40aa53f98b8de590bf16d2a555fd7017587ade9ed6b19d4" }, "src/L2/L1BlockInterop.sol": { - "initCodeHash": "0xa195d3d0fc6cd8259a512c638c8e46aec1c01c24a46e6b695c47fdf66b1c3fda", - "sourceCodeHash": "0xc93a12fbf00ace5f92051f4a57bb3584b5b773c33fd3c40be771c3b4fbf878e9" + "initCodeHash": "0x2929683ae3e4f76fca87462f0217b6e24c418bc964328f8d095f0e90343d2cae", + "sourceCodeHash": "0x78ca58451d973e9896eeb9d19699943b7a4e96c36da2724f47d5aafdf243abcd" }, "src/L2/L1FeeVault.sol": { "initCodeHash": "0x2744d34573be83206d1b75d049d18a7bb37f9058e68c0803e5008c46b0dc2474", "sourceCodeHash": "0x3a94f273937d8908fb37dd2c495a6a0b9c3941fe68ccea51723f84eb343ba225" }, "src/L2/L2CrossDomainMessenger.sol": { - "initCodeHash": "0x55172a028a65e930e4486bb1a881bb2bc9f29fc1c8faa329f3b6c79a19c241fe", - "sourceCodeHash": "0x3a522442ba91ab50e518dd1f1df55b3e7d3039ef6d995a37ac69665e5c188aa3" + "initCodeHash": "0x5d1d1c0c3cc2171832438cbafb6e55c142eab43a7d7ea09ee818a7e3c50d9314", + "sourceCodeHash": "0x440d299b7429c44f6faa4005b33428f9edc1283027d9c78a63eb3d76452bfa47" }, "src/L2/L2ERC721Bridge.sol": { "initCodeHash": "0xcafa012b2d8f1bb05c11cbbff9749c0fe6f995c9afb1d26d2d71f03384e34a22", "sourceCodeHash": "0xa7646a588275046f92525ef121e5a0fe149e7752ea51fe62f7e0686a21153542" }, "src/L2/L2StandardBridge.sol": { - "initCodeHash": "0xf4b43f49bb9c97c654ab0d0a2ab51a4927f3ecaadf595c986da9f92dfb4ad7e8", - "sourceCodeHash": "0x90c0cd9e33bd00a68f19b354498af0342c72409ed410daa9268828b368a15eb2" + "initCodeHash": "0xc4d2a5313812e84fd66f32acc15d7fc7bb8ef7fa53bb23da81df02a12b6464ae", + "sourceCodeHash": "0x81f6a627e61fd1e7fd7bde6d7ea8bfff143042a20722d91e19fd29461e60dfe6" }, "src/L2/L2ToL1MessagePasser.sol": { "initCodeHash": "0x08bbede75cd6dfd076903b8f04d24f82fa7881576c135825098778632e37eebc", diff --git a/packages/contracts-bedrock/snapshots/abi/L1Block.json b/packages/contracts-bedrock/snapshots/abi/L1Block.json index e29645c3c61..020c9e942c7 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1Block.json +++ b/packages/contracts-bedrock/snapshots/abi/L1Block.json @@ -5,11 +5,11 @@ "outputs": [ { "internalType": "address", - "name": "", + "name": "addr_", "type": "address" } ], - "stateMutability": "view", + "stateMutability": "pure", "type": "function" }, { diff --git a/packages/contracts-bedrock/snapshots/abi/L1BlockInterop.json b/packages/contracts-bedrock/snapshots/abi/L1BlockInterop.json index 50d0e2f4f81..aa278165fe2 100644 --- a/packages/contracts-bedrock/snapshots/abi/L1BlockInterop.json +++ b/packages/contracts-bedrock/snapshots/abi/L1BlockInterop.json @@ -5,11 +5,11 @@ "outputs": [ { "internalType": "address", - "name": "", + "name": "addr_", "type": "address" } ], - "stateMutability": "view", + "stateMutability": "pure", "type": "function" }, { diff --git a/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json b/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json index 25c88588882..aa3b8d21a65 100644 --- a/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json +++ b/packages/contracts-bedrock/snapshots/abi/OptimismPortal.json @@ -163,24 +163,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "gasPayingToken", - "outputs": [ - { - "internalType": "address", - "name": "addr_", - "type": "address" - }, - { - "internalType": "uint8", - "name": "decimals_", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "guardian", diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json index 68a10a1c1e9..8ee03f9eedf 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json @@ -3314,7 +3314,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e372e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c52578560600151603d6000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b5050603d5490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001f081760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f1f806200029f6000396000f3fe6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533f565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc610870565b34801561025957600080fd5b50610188610268366004615473565b610908565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c5565b3480156102cf57600080fd5b506102d8610eb5565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d8565b610f48565b34801561031457600080fd5b50610188610323366004615600565b611003565b34801561033457600080fd5b50610188610343366004615646565b6111c5565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d8565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615683565b611c47565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c60565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569e565b611cba565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d8565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e9565b8260005a90506000610599611f24565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc1565b50610625828261216d565b50505050505050565b8260005a9050600061063e611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190615766565b905061076573ffffffffffffffffffffffffffffffffffffffff831633308c61243a565b61076f89826157ae565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190615766565b14610834576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461084691906157ae565b9091555061085a90508a8a8a8a8a8a611fc1565b5050610866828261216d565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090391906157c6565b905090565b610910610eb5565b15610947576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109b0576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190615803565b519050610a5e610a5936869003860186615868565b612516565b8114610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afc87612572565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c125750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e9190615803565b5114155b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae8565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d679101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5d888a6158ce565b8a604001356125a2565b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae8565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615952565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffd9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe29190615803565b602001516fffffffffffffffffffffffffffffffff166125c6565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611054576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110606201388061266c565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117d9695949392910161596f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b5916155c5565b60405180910390a450505050565b565b6111cd610eb5565b15611204576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611257576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126282612572565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae8565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190615766565b81602001516fffffffffffffffffffffffffffffffff1610156114a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae8565b6114c881602001516fffffffffffffffffffffffffffffffff166125c6565b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190615803565b82518151919250146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae8565b6116fe81602001516fffffffffffffffffffffffffffffffff166125c6565b6117b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60008381526033602052604090205460ff161561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae8565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118da611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193d576119368660400151876080015188606001518960a001516126c8565b9150611b90565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b67578560600151603d60008282546119c691906159d4565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190615766565b9050611a91876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127269092919063ffffffff16565b6060870151611aa090826159d4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190615766565b14611b65576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8b576119368660400151876080015160008960a001516126c8565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf290851515815260200190565b60405180910390a281158015611c085750326001145b15611c3f576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c548260106159eb565b610ffd90615208615a1b565b600080611c6b611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb2574791505090565b5050603d5490565b600054610100900460ff1615808015611cda5750600054600160ff909116105b80611cf45750303b158015611cf4575060005460ff166001145b611d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611dde57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9757603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9f612781565b8015611f0257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190615a47565b90939092509050565b818015611fe3575073ffffffffffffffffffffffffffffffffffffffff861615155b1561201a576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120248151611c47565b67ffffffffffffffff168367ffffffffffffffff161015612071576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120af576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120d0575033731111000000000000000000000000000000001111015b600086868686866040516020016120eb95949392919061596f565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215b91906155c5565b60405180910390a45050505050505050565b6001546000906121a3907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d4565b905060006121af612894565b90506000816020015160ff16826000015163ffffffff166121d09190615ab0565b9050821561230757600154600090612207908390700100000000000000000000000000000000900467ffffffffffffffff16615b18565b90506000836040015160ff168361221e9190615b8c565b60015461223e9084906fffffffffffffffffffffffffffffffff16615b8c565b6122489190615ab0565b600154909150600090612299906122729084906fffffffffffffffffffffffffffffffff16615c48565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612955565b905060018611156122c8576122c561227282876040015160ff1660018a6122c091906159d4565b612974565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061233a908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c7576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f3906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbc565b9050600061240548633b9aca006129c9565b61240f9083615cf9565b905060005a61241e90886159d4565b9050808211156108665761086661243582846159d4565b6129e0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f029085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a09565b60008160000151826020015183604001518460600151604051602001612555949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612555979096959101615d0d565b6000806125ae86612b15565b90506125bc81868686612b47565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265a9190615766565b61266490836157ae565b421192915050565b6001805482919060109061269f908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d8866000612b77565b90508061270e576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277c9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612494565b505050565b600054610100900460ff16612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae8565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c35760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615d78565b600061296a6129648585612b95565b83612ba5565b90505b9392505050565b6000670de0b6b3a76400006129b561298c8583615ab0565b61299e90670de0b6b3a7640000615b18565b6129b085670de0b6b3a7640000615b8c565b612bb4565b6129bf9086615b8c565b61296a9190615ab0565b6000818310156129d9578161296d565b5090919050565b6000805a90505b825a6129f390836159d4565b101561277c57612a0282615e1b565b91506129e7565b6000612a6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be59092919063ffffffff16565b80519091501561277c5780806020019051810190612a899190615952565b61277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae8565b60608180519060200120604051602001612b3191815260200190565b6040516020818303038152906040529050919050565b6000612b6e84612b58878686612bf4565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d9578161296d565b60008183126129d9578161296d565b600061296d670de0b6b3a764000083612bcc86613672565b612bd69190615b8c565b612be09190615ab0565b6138b6565b606061296a8484600085613af5565b60606000845111612c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae8565b6000612c6c84613c8b565b90506000612c7986613d77565b9050600084604051602001612c9091815260200190565b60405160208183030381529060405290506000805b84518110156135e9576000858281518110612cc257612cc2615e53565b602002602001015190508451831115612d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae8565b82600003612e165780518051602091820120604051612dab92612d8592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae8565b612f6d565b805151602011612ecc5780518051602091820120604051612e4092612d8592910190815260200190565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae8565b805184516020808701919091208251919092012014612f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae8565b612f79601060016157ae565b8160200151510361315557845183036130ed57612fb38160200151601081518110612fa657612fa6615e53565b6020026020010151613dda565b96506000875111613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae8565b6001865161305491906159d4565b82146130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae8565b50505050505061296d565b600085848151811061310157613101615e53565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312c5761312c615e53565b6020026020010151905061313f81613f3a565b955061314c6001866157ae565b945050506135d6565b60028160200151510361354e57600061316d82613f5f565b905060008160008151811061318457613184615e53565b016020015160f81c9050600061319b600283615e82565b6131a6906002615ea4565b905060006131b7848360ff16613f83565b905060006131c58a89613f83565b905060006131d38383613fb9565b905080835114613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae8565b60ff85166002148061327a575060ff85166003145b15613469578082511461330f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae8565b6133298760200151600181518110612fa657612fa6615e53565b9c5060008d51116133bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae8565b60018c516133ca91906159d4565b8814613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae8565b50505050505050505050505061296d565b60ff8516158061347c575060ff85166001145b156134bb576134a8876020015160018151811061349b5761349b615e53565b6020026020010151613f3a565b99506134b4818a6157ae565b9850613543565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae8565b5050505050506135d6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae8565b50806135e181615e1b565b915050612ca5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae8565b60008082136136dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b600060606136ea8461406d565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e757506000919050565b680755bf798b4a1bf1e58212613959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae8565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae8565b73ffffffffffffffffffffffffffffffffffffffff85163b613c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2e9190615ec7565b60006040518083038185875af1925050503d8060008114613c6b576040519150601f19603f3d011682016040523d82523d6000602084013e613c70565b606091505b5091509150613c80828286614143565b979650505050505050565b80516060908067ffffffffffffffff811115613ca957613ca9615233565b604051908082528060200260200182016040528015613cee57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc75790505b50915060005b81811015613d70576040518060400160405280858381518110613d1957613d19615e53565b60200260200101518152602001613d48868481518110613d3b57613d3b615e53565b6020026020010151614196565b815250838281518110613d5d57613d5d615e53565b6020908102919091010152600101613cf4565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dcf578060011b82018184015160001a8060041c8253600f811660018301535050600101613da1565b509295945050505050565b60606000806000613dea856141a9565b919450925090506000816001811115613e0557613e05615ee3565b14613e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae8565b613e9c82846157ae565b855114613f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae8565b612b6e85602001518484614c16565b60606020826000015110613f5657613f5182613dda565b610ffd565b610ffd82614caa565b6060610ffd613f7e8360200151600081518110612fa657612fa6615e53565b613d77565b606082518210613fa25750604080516020810190915260008152610ffd565b61296d8383848651613fb491906159d4565b614cc0565b6000808251845110613fcc578251613fcf565b83515b90505b80821080156140565750828281518110613fee57613fee615e53565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402d5761402d615e53565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406657816001019150613fd2565b5092915050565b60008082116140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415257508161296d565b8251156141625782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae891906155c5565b6060610ffd6141a483614e98565b614f81565b600080600080846000015111614267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b6020840151805160001a607f811161428c576000600160009450945094505050614c0f565b60b7811161449a5760006142a16080836159d4565b90508087600001511161435c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae8565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d557507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae8565b5060019550935060009250614c0f915050565b60bf81116147e85760006144af60b7836159d4565b90508087600001511161456a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c6037811161470c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae8565b61471681846157ae565b8951116147cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae8565b6147d68360016157ae565b9750955060009450614c0f9350505050565b60f781116148c95760006147fd60c0836159d4565b9050808760000151116148b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b600195509350849250614c0f915050565b60006148d660f7836159d4565b905080876000015111614991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c60378111614b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae8565b614b3d81846157ae565b895111614bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b614bfd8360016157ae565b9750955060019450614c0f9350505050565b9193909250565b60608167ffffffffffffffff811115614c3157614c31615233565b6040519080825280601f01601f191660200182016040528015614c5b576020820181803683370190505b509050811561296d576000614c7084866157ae565b90506020820160005b84811015614c91578281015182820152602001614c79565b84811115614ca0576000858301525b5050509392505050565b6060610ffd826020015160008460000151614c16565b60608182601f011015614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b828284011015614d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b81830184511015614e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae8565b606082158015614e275760405191506000825260208201604052614e8f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e60578051835260209283019201614e48565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f91856141a9565b919450925090506001816001811115614fac57614fac615ee3565b14615039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae8565b845161504583856157ae565b146150d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae8565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e95790505093506000835b86518110156151d75760008061515c6040518060400160405280858c6000015161514091906159d4565b8152602001858c6020015161515591906157ae565b90526141a9565b50915091506040518060400160405280838361517891906157ae565b8152602001848b6020015161518d91906157ae565b8152508885815181106151a2576151a2615e53565b60209081029190910101526151b86001856157ae565b93506151c481836157ae565b6151ce90846157ae565b92505050615116565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520557600080fd5b50565b803567ffffffffffffffff8116811461522057600080fd5b919050565b801515811461520557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a9576152a9615233565b604052919050565b600082601f8301126152c257600080fd5b813567ffffffffffffffff8111156152dc576152dc615233565b61530d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615262565b81815284602083860101111561532257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535857600080fd5b8635615363816151e3565b9550602087013594506040870135935061537f60608801615208565b9250608087013561538f81615225565b915060a087013567ffffffffffffffff8111156153ab57600080fd5b6153b789828a016152b1565b9150509295509295509295565b600060c082840312156153d657600080fd5b60405160c0810167ffffffffffffffff82821081831117156153fa576153fa615233565b816040528293508435835260208501359150615415826151e3565b8160208401526040850135915061542b826151e3565b816040840152606085013560608401526080850135608084015260a085013591508082111561545957600080fd5b50615466858286016152b1565b60a0830152505092915050565b600080600080600085870360e081121561548c57600080fd5b863567ffffffffffffffff808211156154a457600080fd5b6154b08a838b016153c4565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e957600080fd5b60408901955060c089013592508083111561550357600080fd5b828901925089601f84011261551757600080fd5b823591508082111561552857600080fd5b508860208260051b840101111561553e57600080fd5b959894975092955050506020019190565b60005b8381101561556a578181015183820152602001615552565b83811115611f025750506000910152565b6000815180845261559381602086016020860161554f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296d602083018461557b565b6000602082840312156155ea57600080fd5b5035919050565b60ff8116811461520557600080fd5b6000806000806080858703121561561657600080fd5b8435615621816151e3565b93506020850135615631816155f1565b93969395505050506040820135916060013590565b60006020828403121561565857600080fd5b813567ffffffffffffffff81111561566f57600080fd5b61567b848285016153c4565b949350505050565b60006020828403121561569557600080fd5b61296d82615208565b6000806000606084860312156156b357600080fd5b83356156be816151e3565b925060208401356156ce816151e3565b915060408401356156de816151e3565b809150509250925092565b600080600080600060a0868803121561570157600080fd5b853561570c816151e3565b94506020860135935061572160408701615208565b9250606086013561573181615225565b9150608086013567ffffffffffffffff81111561574d57600080fd5b615759888289016152b1565b9150509295509295909350565b60006020828403121561577857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157c1576157c161577f565b500190565b6000602082840312156157d857600080fd5b815161296d816151e3565b80516fffffffffffffffffffffffffffffffff8116811461522057600080fd5b60006060828403121561581557600080fd5b6040516060810181811067ffffffffffffffff8211171561583857615838615233565b6040528251815261584b602084016157e3565b602082015261585c604084016157e3565b60408201529392505050565b60006080828403121561587a57600080fd5b6040516080810181811067ffffffffffffffff8211171561589d5761589d615233565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e9576158e9615233565b8360051b60206158fa818301615262565b86815291850191818101903684111561591257600080fd5b865b848110156159465780358681111561592c5760008081fd5b61593836828b016152b1565b845250918301918301615914565b50979650505050505050565b60006020828403121561596457600080fd5b815161296d81615225565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c381604985016020870161554f565b919091016049019695505050505050565b6000828210156159e6576159e661577f565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1257615a1261577f565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3e57615a3e61577f565b01949350505050565b60008060408385031215615a5a57600080fd5b8251615a65816151e3565b6020840151909250615a76816155f1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abf57615abf615a81565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1357615b1361577f565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5257615b5261577f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8657615b8661577f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcd57615bcd61577f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0857615c0861577f565b60008712925087820587128484161615615c2457615c2461577f565b87850587128184161615615c3a57615c3a61577f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8257615c8261577f565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb657615cb661577f565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf457615cf461577f565b500290565b600082615d0857615d08615a81565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5860c083018461557b565b98975050505050505050565b805163ffffffff8116811461522057600080fd5b600060c08284031215615d8a57600080fd5b60405160c0810181811067ffffffffffffffff82111715615dad57615dad615233565b604052615db983615d64565b81526020830151615dc9816155f1565b60208201526040830151615ddc816155f1565b6040820152615ded60608401615d64565b6060820152615dfe60808401615d64565b6080820152615e0f60a084016157e3565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4c57615e4c61577f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9557615e95615a81565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebe57615ebe61577f565b90039392505050565b60008251615ed981846020870161554f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3326,13 +3326,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001ff31760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f6d806200029f6000396000f3fe60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e372e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c52578560600151603d6000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b5050603d5490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", - "deployedCode": "0x60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e372e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c52578560600151603d6000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b5050603d5490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001f081760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f1f806200029f6000396000f3fe6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533f565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc610870565b34801561025957600080fd5b50610188610268366004615473565b610908565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c5565b3480156102cf57600080fd5b506102d8610eb5565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d8565b610f48565b34801561031457600080fd5b50610188610323366004615600565b611003565b34801561033457600080fd5b50610188610343366004615646565b6111c5565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d8565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615683565b611c47565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c60565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569e565b611cba565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d8565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e9565b8260005a90506000610599611f24565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc1565b50610625828261216d565b50505050505050565b8260005a9050600061063e611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190615766565b905061076573ffffffffffffffffffffffffffffffffffffffff831633308c61243a565b61076f89826157ae565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190615766565b14610834576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461084691906157ae565b9091555061085a90508a8a8a8a8a8a611fc1565b5050610866828261216d565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090391906157c6565b905090565b610910610eb5565b15610947576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109b0576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190615803565b519050610a5e610a5936869003860186615868565b612516565b8114610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afc87612572565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c125750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e9190615803565b5114155b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae8565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d679101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5d888a6158ce565b8a604001356125a2565b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae8565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615952565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffd9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe29190615803565b602001516fffffffffffffffffffffffffffffffff166125c6565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611054576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110606201388061266c565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117d9695949392910161596f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b5916155c5565b60405180910390a450505050565b565b6111cd610eb5565b15611204576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611257576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126282612572565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae8565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190615766565b81602001516fffffffffffffffffffffffffffffffff1610156114a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae8565b6114c881602001516fffffffffffffffffffffffffffffffff166125c6565b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190615803565b82518151919250146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae8565b6116fe81602001516fffffffffffffffffffffffffffffffff166125c6565b6117b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60008381526033602052604090205460ff161561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae8565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118da611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193d576119368660400151876080015188606001518960a001516126c8565b9150611b90565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b67578560600151603d60008282546119c691906159d4565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190615766565b9050611a91876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127269092919063ffffffff16565b6060870151611aa090826159d4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190615766565b14611b65576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8b576119368660400151876080015160008960a001516126c8565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf290851515815260200190565b60405180910390a281158015611c085750326001145b15611c3f576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c548260106159eb565b610ffd90615208615a1b565b600080611c6b611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb2574791505090565b5050603d5490565b600054610100900460ff1615808015611cda5750600054600160ff909116105b80611cf45750303b158015611cf4575060005460ff166001145b611d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611dde57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9757603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9f612781565b8015611f0257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190615a47565b90939092509050565b818015611fe3575073ffffffffffffffffffffffffffffffffffffffff861615155b1561201a576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120248151611c47565b67ffffffffffffffff168367ffffffffffffffff161015612071576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120af576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120d0575033731111000000000000000000000000000000001111015b600086868686866040516020016120eb95949392919061596f565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215b91906155c5565b60405180910390a45050505050505050565b6001546000906121a3907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d4565b905060006121af612894565b90506000816020015160ff16826000015163ffffffff166121d09190615ab0565b9050821561230757600154600090612207908390700100000000000000000000000000000000900467ffffffffffffffff16615b18565b90506000836040015160ff168361221e9190615b8c565b60015461223e9084906fffffffffffffffffffffffffffffffff16615b8c565b6122489190615ab0565b600154909150600090612299906122729084906fffffffffffffffffffffffffffffffff16615c48565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612955565b905060018611156122c8576122c561227282876040015160ff1660018a6122c091906159d4565b612974565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061233a908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c7576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f3906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbc565b9050600061240548633b9aca006129c9565b61240f9083615cf9565b905060005a61241e90886159d4565b9050808211156108665761086661243582846159d4565b6129e0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f029085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a09565b60008160000151826020015183604001518460600151604051602001612555949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612555979096959101615d0d565b6000806125ae86612b15565b90506125bc81868686612b47565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265a9190615766565b61266490836157ae565b421192915050565b6001805482919060109061269f908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d8866000612b77565b90508061270e576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277c9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612494565b505050565b600054610100900460ff16612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae8565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c35760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615d78565b600061296a6129648585612b95565b83612ba5565b90505b9392505050565b6000670de0b6b3a76400006129b561298c8583615ab0565b61299e90670de0b6b3a7640000615b18565b6129b085670de0b6b3a7640000615b8c565b612bb4565b6129bf9086615b8c565b61296a9190615ab0565b6000818310156129d9578161296d565b5090919050565b6000805a90505b825a6129f390836159d4565b101561277c57612a0282615e1b565b91506129e7565b6000612a6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be59092919063ffffffff16565b80519091501561277c5780806020019051810190612a899190615952565b61277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae8565b60608180519060200120604051602001612b3191815260200190565b6040516020818303038152906040529050919050565b6000612b6e84612b58878686612bf4565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d9578161296d565b60008183126129d9578161296d565b600061296d670de0b6b3a764000083612bcc86613672565b612bd69190615b8c565b612be09190615ab0565b6138b6565b606061296a8484600085613af5565b60606000845111612c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae8565b6000612c6c84613c8b565b90506000612c7986613d77565b9050600084604051602001612c9091815260200190565b60405160208183030381529060405290506000805b84518110156135e9576000858281518110612cc257612cc2615e53565b602002602001015190508451831115612d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae8565b82600003612e165780518051602091820120604051612dab92612d8592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae8565b612f6d565b805151602011612ecc5780518051602091820120604051612e4092612d8592910190815260200190565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae8565b805184516020808701919091208251919092012014612f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae8565b612f79601060016157ae565b8160200151510361315557845183036130ed57612fb38160200151601081518110612fa657612fa6615e53565b6020026020010151613dda565b96506000875111613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae8565b6001865161305491906159d4565b82146130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae8565b50505050505061296d565b600085848151811061310157613101615e53565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312c5761312c615e53565b6020026020010151905061313f81613f3a565b955061314c6001866157ae565b945050506135d6565b60028160200151510361354e57600061316d82613f5f565b905060008160008151811061318457613184615e53565b016020015160f81c9050600061319b600283615e82565b6131a6906002615ea4565b905060006131b7848360ff16613f83565b905060006131c58a89613f83565b905060006131d38383613fb9565b905080835114613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae8565b60ff85166002148061327a575060ff85166003145b15613469578082511461330f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae8565b6133298760200151600181518110612fa657612fa6615e53565b9c5060008d51116133bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae8565b60018c516133ca91906159d4565b8814613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae8565b50505050505050505050505061296d565b60ff8516158061347c575060ff85166001145b156134bb576134a8876020015160018151811061349b5761349b615e53565b6020026020010151613f3a565b99506134b4818a6157ae565b9850613543565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae8565b5050505050506135d6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae8565b50806135e181615e1b565b915050612ca5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae8565b60008082136136dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b600060606136ea8461406d565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e757506000919050565b680755bf798b4a1bf1e58212613959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae8565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae8565b73ffffffffffffffffffffffffffffffffffffffff85163b613c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2e9190615ec7565b60006040518083038185875af1925050503d8060008114613c6b576040519150601f19603f3d011682016040523d82523d6000602084013e613c70565b606091505b5091509150613c80828286614143565b979650505050505050565b80516060908067ffffffffffffffff811115613ca957613ca9615233565b604051908082528060200260200182016040528015613cee57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc75790505b50915060005b81811015613d70576040518060400160405280858381518110613d1957613d19615e53565b60200260200101518152602001613d48868481518110613d3b57613d3b615e53565b6020026020010151614196565b815250838281518110613d5d57613d5d615e53565b6020908102919091010152600101613cf4565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dcf578060011b82018184015160001a8060041c8253600f811660018301535050600101613da1565b509295945050505050565b60606000806000613dea856141a9565b919450925090506000816001811115613e0557613e05615ee3565b14613e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae8565b613e9c82846157ae565b855114613f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae8565b612b6e85602001518484614c16565b60606020826000015110613f5657613f5182613dda565b610ffd565b610ffd82614caa565b6060610ffd613f7e8360200151600081518110612fa657612fa6615e53565b613d77565b606082518210613fa25750604080516020810190915260008152610ffd565b61296d8383848651613fb491906159d4565b614cc0565b6000808251845110613fcc578251613fcf565b83515b90505b80821080156140565750828281518110613fee57613fee615e53565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402d5761402d615e53565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406657816001019150613fd2565b5092915050565b60008082116140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415257508161296d565b8251156141625782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae891906155c5565b6060610ffd6141a483614e98565b614f81565b600080600080846000015111614267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b6020840151805160001a607f811161428c576000600160009450945094505050614c0f565b60b7811161449a5760006142a16080836159d4565b90508087600001511161435c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae8565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d557507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae8565b5060019550935060009250614c0f915050565b60bf81116147e85760006144af60b7836159d4565b90508087600001511161456a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c6037811161470c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae8565b61471681846157ae565b8951116147cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae8565b6147d68360016157ae565b9750955060009450614c0f9350505050565b60f781116148c95760006147fd60c0836159d4565b9050808760000151116148b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b600195509350849250614c0f915050565b60006148d660f7836159d4565b905080876000015111614991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c60378111614b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae8565b614b3d81846157ae565b895111614bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b614bfd8360016157ae565b9750955060019450614c0f9350505050565b9193909250565b60608167ffffffffffffffff811115614c3157614c31615233565b6040519080825280601f01601f191660200182016040528015614c5b576020820181803683370190505b509050811561296d576000614c7084866157ae565b90506020820160005b84811015614c91578281015182820152602001614c79565b84811115614ca0576000858301525b5050509392505050565b6060610ffd826020015160008460000151614c16565b60608182601f011015614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b828284011015614d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b81830184511015614e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae8565b606082158015614e275760405191506000825260208201604052614e8f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e60578051835260209283019201614e48565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f91856141a9565b919450925090506001816001811115614fac57614fac615ee3565b14615039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae8565b845161504583856157ae565b146150d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae8565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e95790505093506000835b86518110156151d75760008061515c6040518060400160405280858c6000015161514091906159d4565b8152602001858c6020015161515591906157ae565b90526141a9565b50915091506040518060400160405280838361517891906157ae565b8152602001848b6020015161518d91906157ae565b8152508885815181106151a2576151a2615e53565b60209081029190910101526151b86001856157ae565b93506151c481836157ae565b6151ce90846157ae565b92505050615116565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520557600080fd5b50565b803567ffffffffffffffff8116811461522057600080fd5b919050565b801515811461520557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a9576152a9615233565b604052919050565b600082601f8301126152c257600080fd5b813567ffffffffffffffff8111156152dc576152dc615233565b61530d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615262565b81815284602083860101111561532257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535857600080fd5b8635615363816151e3565b9550602087013594506040870135935061537f60608801615208565b9250608087013561538f81615225565b915060a087013567ffffffffffffffff8111156153ab57600080fd5b6153b789828a016152b1565b9150509295509295509295565b600060c082840312156153d657600080fd5b60405160c0810167ffffffffffffffff82821081831117156153fa576153fa615233565b816040528293508435835260208501359150615415826151e3565b8160208401526040850135915061542b826151e3565b816040840152606085013560608401526080850135608084015260a085013591508082111561545957600080fd5b50615466858286016152b1565b60a0830152505092915050565b600080600080600085870360e081121561548c57600080fd5b863567ffffffffffffffff808211156154a457600080fd5b6154b08a838b016153c4565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e957600080fd5b60408901955060c089013592508083111561550357600080fd5b828901925089601f84011261551757600080fd5b823591508082111561552857600080fd5b508860208260051b840101111561553e57600080fd5b959894975092955050506020019190565b60005b8381101561556a578181015183820152602001615552565b83811115611f025750506000910152565b6000815180845261559381602086016020860161554f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296d602083018461557b565b6000602082840312156155ea57600080fd5b5035919050565b60ff8116811461520557600080fd5b6000806000806080858703121561561657600080fd5b8435615621816151e3565b93506020850135615631816155f1565b93969395505050506040820135916060013590565b60006020828403121561565857600080fd5b813567ffffffffffffffff81111561566f57600080fd5b61567b848285016153c4565b949350505050565b60006020828403121561569557600080fd5b61296d82615208565b6000806000606084860312156156b357600080fd5b83356156be816151e3565b925060208401356156ce816151e3565b915060408401356156de816151e3565b809150509250925092565b600080600080600060a0868803121561570157600080fd5b853561570c816151e3565b94506020860135935061572160408701615208565b9250606086013561573181615225565b9150608086013567ffffffffffffffff81111561574d57600080fd5b615759888289016152b1565b9150509295509295909350565b60006020828403121561577857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157c1576157c161577f565b500190565b6000602082840312156157d857600080fd5b815161296d816151e3565b80516fffffffffffffffffffffffffffffffff8116811461522057600080fd5b60006060828403121561581557600080fd5b6040516060810181811067ffffffffffffffff8211171561583857615838615233565b6040528251815261584b602084016157e3565b602082015261585c604084016157e3565b60408201529392505050565b60006080828403121561587a57600080fd5b6040516080810181811067ffffffffffffffff8211171561589d5761589d615233565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e9576158e9615233565b8360051b60206158fa818301615262565b86815291850191818101903684111561591257600080fd5b865b848110156159465780358681111561592c5760008081fd5b61593836828b016152b1565b845250918301918301615914565b50979650505050505050565b60006020828403121561596457600080fd5b815161296d81615225565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c381604985016020870161554f565b919091016049019695505050505050565b6000828210156159e6576159e661577f565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1257615a1261577f565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3e57615a3e61577f565b01949350505050565b60008060408385031215615a5a57600080fd5b8251615a65816151e3565b6020840151909250615a76816155f1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abf57615abf615a81565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1357615b1361577f565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5257615b5261577f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8657615b8661577f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcd57615bcd61577f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0857615c0861577f565b60008712925087820587128484161615615c2457615c2461577f565b87850587128184161615615c3a57615c3a61577f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8257615c8261577f565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb657615cb661577f565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf457615cf461577f565b500290565b600082615d0857615d08615a81565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5860c083018461557b565b98975050505050505050565b805163ffffffff8116811461522057600080fd5b600060c08284031215615d8a57600080fd5b60405160c0810181811067ffffffffffffffff82111715615dad57615dad615233565b604052615db983615d64565b81526020830151615dc9816155f1565b60208201526040830151615ddc816155f1565b6040820152615ded60608401615d64565b6060820152615dfe60808401615d64565b6080820152615e0f60a084016157e3565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4c57615e4c61577f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9557615e95615a81565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebe57615ebe61577f565b90039392505050565b60008251615ed981846020870161554f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "deployedCode": "0x6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533f565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc610870565b34801561025957600080fd5b50610188610268366004615473565b610908565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c5565b3480156102cf57600080fd5b506102d8610eb5565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d8565b610f48565b34801561031457600080fd5b50610188610323366004615600565b611003565b34801561033457600080fd5b50610188610343366004615646565b6111c5565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d8565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615683565b611c47565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c60565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569e565b611cba565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d8565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e9565b8260005a90506000610599611f24565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc1565b50610625828261216d565b50505050505050565b8260005a9050600061063e611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190615766565b905061076573ffffffffffffffffffffffffffffffffffffffff831633308c61243a565b61076f89826157ae565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190615766565b14610834576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461084691906157ae565b9091555061085a90508a8a8a8a8a8a611fc1565b5050610866828261216d565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090391906157c6565b905090565b610910610eb5565b15610947576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109b0576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190615803565b519050610a5e610a5936869003860186615868565b612516565b8114610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afc87612572565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c125750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e9190615803565b5114155b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae8565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d679101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5d888a6158ce565b8a604001356125a2565b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae8565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615952565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffd9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe29190615803565b602001516fffffffffffffffffffffffffffffffff166125c6565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611054576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110606201388061266c565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117d9695949392910161596f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b5916155c5565b60405180910390a450505050565b565b6111cd610eb5565b15611204576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611257576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126282612572565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae8565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190615766565b81602001516fffffffffffffffffffffffffffffffff1610156114a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae8565b6114c881602001516fffffffffffffffffffffffffffffffff166125c6565b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190615803565b82518151919250146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae8565b6116fe81602001516fffffffffffffffffffffffffffffffff166125c6565b6117b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60008381526033602052604090205460ff161561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae8565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118da611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193d576119368660400151876080015188606001518960a001516126c8565b9150611b90565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b67578560600151603d60008282546119c691906159d4565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190615766565b9050611a91876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127269092919063ffffffff16565b6060870151611aa090826159d4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190615766565b14611b65576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8b576119368660400151876080015160008960a001516126c8565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf290851515815260200190565b60405180910390a281158015611c085750326001145b15611c3f576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c548260106159eb565b610ffd90615208615a1b565b600080611c6b611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb2574791505090565b5050603d5490565b600054610100900460ff1615808015611cda5750600054600160ff909116105b80611cf45750303b158015611cf4575060005460ff166001145b611d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611dde57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9757603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9f612781565b8015611f0257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190615a47565b90939092509050565b818015611fe3575073ffffffffffffffffffffffffffffffffffffffff861615155b1561201a576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120248151611c47565b67ffffffffffffffff168367ffffffffffffffff161015612071576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120af576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120d0575033731111000000000000000000000000000000001111015b600086868686866040516020016120eb95949392919061596f565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215b91906155c5565b60405180910390a45050505050505050565b6001546000906121a3907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d4565b905060006121af612894565b90506000816020015160ff16826000015163ffffffff166121d09190615ab0565b9050821561230757600154600090612207908390700100000000000000000000000000000000900467ffffffffffffffff16615b18565b90506000836040015160ff168361221e9190615b8c565b60015461223e9084906fffffffffffffffffffffffffffffffff16615b8c565b6122489190615ab0565b600154909150600090612299906122729084906fffffffffffffffffffffffffffffffff16615c48565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612955565b905060018611156122c8576122c561227282876040015160ff1660018a6122c091906159d4565b612974565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061233a908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c7576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f3906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbc565b9050600061240548633b9aca006129c9565b61240f9083615cf9565b905060005a61241e90886159d4565b9050808211156108665761086661243582846159d4565b6129e0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f029085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a09565b60008160000151826020015183604001518460600151604051602001612555949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612555979096959101615d0d565b6000806125ae86612b15565b90506125bc81868686612b47565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265a9190615766565b61266490836157ae565b421192915050565b6001805482919060109061269f908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d8866000612b77565b90508061270e576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277c9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612494565b505050565b600054610100900460ff16612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae8565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c35760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615d78565b600061296a6129648585612b95565b83612ba5565b90505b9392505050565b6000670de0b6b3a76400006129b561298c8583615ab0565b61299e90670de0b6b3a7640000615b18565b6129b085670de0b6b3a7640000615b8c565b612bb4565b6129bf9086615b8c565b61296a9190615ab0565b6000818310156129d9578161296d565b5090919050565b6000805a90505b825a6129f390836159d4565b101561277c57612a0282615e1b565b91506129e7565b6000612a6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be59092919063ffffffff16565b80519091501561277c5780806020019051810190612a899190615952565b61277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae8565b60608180519060200120604051602001612b3191815260200190565b6040516020818303038152906040529050919050565b6000612b6e84612b58878686612bf4565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d9578161296d565b60008183126129d9578161296d565b600061296d670de0b6b3a764000083612bcc86613672565b612bd69190615b8c565b612be09190615ab0565b6138b6565b606061296a8484600085613af5565b60606000845111612c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae8565b6000612c6c84613c8b565b90506000612c7986613d77565b9050600084604051602001612c9091815260200190565b60405160208183030381529060405290506000805b84518110156135e9576000858281518110612cc257612cc2615e53565b602002602001015190508451831115612d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae8565b82600003612e165780518051602091820120604051612dab92612d8592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae8565b612f6d565b805151602011612ecc5780518051602091820120604051612e4092612d8592910190815260200190565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae8565b805184516020808701919091208251919092012014612f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae8565b612f79601060016157ae565b8160200151510361315557845183036130ed57612fb38160200151601081518110612fa657612fa6615e53565b6020026020010151613dda565b96506000875111613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae8565b6001865161305491906159d4565b82146130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae8565b50505050505061296d565b600085848151811061310157613101615e53565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312c5761312c615e53565b6020026020010151905061313f81613f3a565b955061314c6001866157ae565b945050506135d6565b60028160200151510361354e57600061316d82613f5f565b905060008160008151811061318457613184615e53565b016020015160f81c9050600061319b600283615e82565b6131a6906002615ea4565b905060006131b7848360ff16613f83565b905060006131c58a89613f83565b905060006131d38383613fb9565b905080835114613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae8565b60ff85166002148061327a575060ff85166003145b15613469578082511461330f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae8565b6133298760200151600181518110612fa657612fa6615e53565b9c5060008d51116133bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae8565b60018c516133ca91906159d4565b8814613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae8565b50505050505050505050505061296d565b60ff8516158061347c575060ff85166001145b156134bb576134a8876020015160018151811061349b5761349b615e53565b6020026020010151613f3a565b99506134b4818a6157ae565b9850613543565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae8565b5050505050506135d6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae8565b50806135e181615e1b565b915050612ca5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae8565b60008082136136dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b600060606136ea8461406d565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e757506000919050565b680755bf798b4a1bf1e58212613959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae8565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae8565b73ffffffffffffffffffffffffffffffffffffffff85163b613c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2e9190615ec7565b60006040518083038185875af1925050503d8060008114613c6b576040519150601f19603f3d011682016040523d82523d6000602084013e613c70565b606091505b5091509150613c80828286614143565b979650505050505050565b80516060908067ffffffffffffffff811115613ca957613ca9615233565b604051908082528060200260200182016040528015613cee57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc75790505b50915060005b81811015613d70576040518060400160405280858381518110613d1957613d19615e53565b60200260200101518152602001613d48868481518110613d3b57613d3b615e53565b6020026020010151614196565b815250838281518110613d5d57613d5d615e53565b6020908102919091010152600101613cf4565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dcf578060011b82018184015160001a8060041c8253600f811660018301535050600101613da1565b509295945050505050565b60606000806000613dea856141a9565b919450925090506000816001811115613e0557613e05615ee3565b14613e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae8565b613e9c82846157ae565b855114613f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae8565b612b6e85602001518484614c16565b60606020826000015110613f5657613f5182613dda565b610ffd565b610ffd82614caa565b6060610ffd613f7e8360200151600081518110612fa657612fa6615e53565b613d77565b606082518210613fa25750604080516020810190915260008152610ffd565b61296d8383848651613fb491906159d4565b614cc0565b6000808251845110613fcc578251613fcf565b83515b90505b80821080156140565750828281518110613fee57613fee615e53565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402d5761402d615e53565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406657816001019150613fd2565b5092915050565b60008082116140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415257508161296d565b8251156141625782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae891906155c5565b6060610ffd6141a483614e98565b614f81565b600080600080846000015111614267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b6020840151805160001a607f811161428c576000600160009450945094505050614c0f565b60b7811161449a5760006142a16080836159d4565b90508087600001511161435c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae8565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d557507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae8565b5060019550935060009250614c0f915050565b60bf81116147e85760006144af60b7836159d4565b90508087600001511161456a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c6037811161470c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae8565b61471681846157ae565b8951116147cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae8565b6147d68360016157ae565b9750955060009450614c0f9350505050565b60f781116148c95760006147fd60c0836159d4565b9050808760000151116148b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b600195509350849250614c0f915050565b60006148d660f7836159d4565b905080876000015111614991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c60378111614b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae8565b614b3d81846157ae565b895111614bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b614bfd8360016157ae565b9750955060019450614c0f9350505050565b9193909250565b60608167ffffffffffffffff811115614c3157614c31615233565b6040519080825280601f01601f191660200182016040528015614c5b576020820181803683370190505b509050811561296d576000614c7084866157ae565b90506020820160005b84811015614c91578281015182820152602001614c79565b84811115614ca0576000858301525b5050509392505050565b6060610ffd826020015160008460000151614c16565b60608182601f011015614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b828284011015614d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b81830184511015614e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae8565b606082158015614e275760405191506000825260208201604052614e8f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e60578051835260209283019201614e48565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f91856141a9565b919450925090506001816001811115614fac57614fac615ee3565b14615039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae8565b845161504583856157ae565b146150d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae8565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e95790505093506000835b86518110156151d75760008061515c6040518060400160405280858c6000015161514091906159d4565b8152602001858c6020015161515591906157ae565b90526141a9565b50915091506040518060400160405280838361517891906157ae565b8152602001848b6020015161518d91906157ae565b8152508885815181106151a2576151a2615e53565b60209081029190910101526151b86001856157ae565b93506151c481836157ae565b6151ce90846157ae565b92505050615116565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520557600080fd5b50565b803567ffffffffffffffff8116811461522057600080fd5b919050565b801515811461520557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a9576152a9615233565b604052919050565b600082601f8301126152c257600080fd5b813567ffffffffffffffff8111156152dc576152dc615233565b61530d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615262565b81815284602083860101111561532257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535857600080fd5b8635615363816151e3565b9550602087013594506040870135935061537f60608801615208565b9250608087013561538f81615225565b915060a087013567ffffffffffffffff8111156153ab57600080fd5b6153b789828a016152b1565b9150509295509295509295565b600060c082840312156153d657600080fd5b60405160c0810167ffffffffffffffff82821081831117156153fa576153fa615233565b816040528293508435835260208501359150615415826151e3565b8160208401526040850135915061542b826151e3565b816040840152606085013560608401526080850135608084015260a085013591508082111561545957600080fd5b50615466858286016152b1565b60a0830152505092915050565b600080600080600085870360e081121561548c57600080fd5b863567ffffffffffffffff808211156154a457600080fd5b6154b08a838b016153c4565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e957600080fd5b60408901955060c089013592508083111561550357600080fd5b828901925089601f84011261551757600080fd5b823591508082111561552857600080fd5b508860208260051b840101111561553e57600080fd5b959894975092955050506020019190565b60005b8381101561556a578181015183820152602001615552565b83811115611f025750506000910152565b6000815180845261559381602086016020860161554f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296d602083018461557b565b6000602082840312156155ea57600080fd5b5035919050565b60ff8116811461520557600080fd5b6000806000806080858703121561561657600080fd5b8435615621816151e3565b93506020850135615631816155f1565b93969395505050506040820135916060013590565b60006020828403121561565857600080fd5b813567ffffffffffffffff81111561566f57600080fd5b61567b848285016153c4565b949350505050565b60006020828403121561569557600080fd5b61296d82615208565b6000806000606084860312156156b357600080fd5b83356156be816151e3565b925060208401356156ce816151e3565b915060408401356156de816151e3565b809150509250925092565b600080600080600060a0868803121561570157600080fd5b853561570c816151e3565b94506020860135935061572160408701615208565b9250606086013561573181615225565b9150608086013567ffffffffffffffff81111561574d57600080fd5b615759888289016152b1565b9150509295509295909350565b60006020828403121561577857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157c1576157c161577f565b500190565b6000602082840312156157d857600080fd5b815161296d816151e3565b80516fffffffffffffffffffffffffffffffff8116811461522057600080fd5b60006060828403121561581557600080fd5b6040516060810181811067ffffffffffffffff8211171561583857615838615233565b6040528251815261584b602084016157e3565b602082015261585c604084016157e3565b60408201529392505050565b60006080828403121561587a57600080fd5b6040516080810181811067ffffffffffffffff8211171561589d5761589d615233565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e9576158e9615233565b8360051b60206158fa818301615262565b86815291850191818101903684111561591257600080fd5b865b848110156159465780358681111561592c5760008081fd5b61593836828b016152b1565b845250918301918301615914565b50979650505050505050565b60006020828403121561596457600080fd5b815161296d81615225565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c381604985016020870161554f565b919091016049019695505050505050565b6000828210156159e6576159e661577f565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1257615a1261577f565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3e57615a3e61577f565b01949350505050565b60008060408385031215615a5a57600080fd5b8251615a65816151e3565b6020840151909250615a76816155f1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abf57615abf615a81565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1357615b1361577f565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5257615b5261577f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8657615b8661577f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcd57615bcd61577f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0857615c0861577f565b60008712925087820587128484161615615c2457615c2461577f565b87850587128184161615615c3a57615c3a61577f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8257615c8261577f565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb657615cb661577f565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf457615cf461577f565b500290565b600082615d0857615d08615a81565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5860c083018461557b565b98975050505050505050565b805163ffffffff8116811461522057600080fd5b600060c08284031215615d8a57600080fd5b60405160c0810181811067ffffffffffffffff82111715615dad57615dad615233565b604052615db983615d64565b81526020830151615dc9816155f1565b60208201526040830151615ddc816155f1565b6040820152615ded60608401615d64565b6060820152615dfe60808401615d64565b6080820152615e0f60a084016157e3565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4c57615e4c61577f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9557615e95615a81565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebe57615ebe61577f565b90039392505050565b60008251615ed981846020870161554f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3340,7 +3340,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3348,7 +3348,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3356,7 +3356,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3364,7 +3364,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3372,7 +3372,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3380,7 +3380,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3388,7 +3388,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3396,7 +3396,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3404,7 +3404,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3412,7 +3412,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3420,7 +3420,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3428,7 +3428,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3436,7 +3436,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3444,7 +3444,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3452,7 +3452,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3460,7 +3460,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3468,7 +3468,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3476,7 +3476,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": true, "newValue": "0x000000000000000100000000000000000000000000000000000000003b9aca00", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3484,7 +3484,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3492,7 +3492,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3564,7 +3564,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3578,7 +3578,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3590,7 +3590,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3604,7 +3604,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3616,7 +3616,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3630,7 +3630,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3642,7 +3642,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3656,7 +3656,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -3707,7 +3707,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620015b71760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6121a3806200029e6000396000f3fe60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620015b71760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6121a3806200029e6000396000f3fe60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3719,13 +3719,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620015b71760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6121a3806200029e6000396000f3fe60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a", - "deployedCode": "0x60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028e565b600054600160a81b900460ff16158080156200004f57506000546001600160a01b90910460ff16105b806200008657506200006c30620001c860201b620015b71760201c565b158015620000865750600054600160a01b900460ff166001145b620000ef5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff60a01b1916600160a01b17905580156200011d576000805460ff60a81b1916600160a81b1790555b60fb80546001600160a01b038087166001600160a01b03199283161790925560fc805486841690831617905560fd80549285169290911691909117905562000179734200000000000000000000000000000000000007620001d7565b8015620001c2576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054600160a81b900460ff16620002465760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000e6565b60cc546001600160a01b03166200026c5760cc80546001600160a01b03191661dead1790555b60cf80546001600160a01b0319166001600160a01b0392909216919091179055565b6121a3806200029e6000396000f3fe60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a", + "deployedCode": "0x60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3733,7 +3733,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3741,7 +3741,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3749,7 +3749,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3757,7 +3757,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3765,7 +3765,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -3773,7 +3773,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": true, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000010000000000000000000000000000000000000000", @@ -3781,7 +3781,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3789,7 +3789,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3797,7 +3797,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fb" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3805,7 +3805,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3813,7 +3813,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fc" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3821,7 +3821,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3829,7 +3829,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000fd" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3837,7 +3837,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3845,7 +3845,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3853,7 +3853,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3861,7 +3861,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cc" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3869,7 +3869,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3877,7 +3877,7 @@ "slot": "0x00000000000000000000000000000000000000000000000000000000000000cf" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000001010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3885,7 +3885,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": true, "newValue": "0x0000000000000000000000010000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000001010000000000000000000000000000000000000000", @@ -3914,7 +3914,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3928,7 +3928,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -3940,7 +3940,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3954,7 +3954,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000007", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000007", @@ -3966,7 +3966,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3980,7 +3980,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3992,7 +3992,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4006,7 +4006,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4018,7 +4018,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4032,7 +4032,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4617,7 +4617,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000496200003260016000805160206200398783398151915262001141565b60001b600019620000d160201b62000f441760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b6200136a565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000f481760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000f441760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001141565b60001b84620000d160201b62000f441760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001141565b60001b8360000151620000d160201b62000f441760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001141565b60001b8360200151620000d160201b62000f441760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001141565b60001b8360400151620000d160201b62000f441760201c565b6200038f6200037660017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762001141565b60001b8360600151620000d160201b62000f441760201c565b620003c8620003af60016000805160206200396783398151915262001141565b60001b8360800151620000d160201b62000f441760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001141565b60001b8360a00151620000d160201b62000f441760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a29565b6200044162000d6d565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d9a565b565b6200056762000e01565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e5d565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062003927833981519152836040516200062291906200118a565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062003927833981519152836040516200068591906200118a565b60405180910390a3505050565b6200069c62000d6d565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200398783398151915262001141565b60001b62000eaf60201b620006d71760201c565b6000036200055b576200055b6200078b60016000805160206200398783398151915262001141565b60001b43620000d160201b62000f441760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015620007ea5750620007e862000eb3565b155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085a9190620011bf565b60ff1614620008c35760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b600062000943826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000932919081019062001201565b62000ee760201b62000f641760201c565b905060006200098a836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b9050620009a6836012848462000f7f60201b620010071760201c565b620009b06200105b565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801562000a0b57600080fd5b505af115801562000a20573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000ab85760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b295760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b4b9190620012b9565b63ffffffff16111562000b905760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b6000816020015160ff161162000c015760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c23908290620012e4565b62000c2f919062001316565b63ffffffff161462000caa5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d959063ffffffff6a010000000000000000000082048116911662001345565b905090565b600054610100900460ff1662000df65760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e5d565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b60008062000ec06200107d565b506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b600060208251111562000f635760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f79826200109e60201b620010d91760201c565b92915050565b62000fc962000f9f6001600080516020620038e783398151915262001141565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000f441760201c565b6200100f62000ffa60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001141565b60001b83620000d160201b62000f441760201c565b620010556200104060017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001141565b60001b82620000d160201b62000f441760201c565b50505050565b600062000d956200074f60016000805160206200396783398151915262001141565b60008062001095620010c860201b620011021760201c565b90939092509050565b805160218110620010b75763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60008080620010ec6200074f6001600080516020620038e783398151915262001141565b6001600160a01b03811693509050826200111f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b634e487b7160e01b600052601160045260246000fd5b6000828210156200115657620011566200112b565b500390565b60005b83811015620011785781810151838201526020016200115e565b83811115620010555750506000910152565b6020815260008251806020840152620011ab8160408501602087016200115b565b601f01601f19169190910160400192915050565b600060208284031215620011d257600080fd5b815160ff81168114620011e457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200121457600080fd5b81516001600160401b03808211156200122c57600080fd5b818401915084601f8301126200124157600080fd5b815181811115620012565762001256620011eb565b604051601f8201601f19908116603f01168101908382118183101715620012815762001281620011eb565b816040528281528760208487010111156200129b57600080fd5b620012ae8360208301602088016200115b565b979650505050505050565b600063ffffffff808316818516808303821115620012db57620012db6200112b565b01949350505050565b600063ffffffff808416806200130a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156200133c576200133c6200112b565b02949350505050565b60006001600160401b03828116848216808303821115620012db57620012db6200112b565b61256d806200137a6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000496200003260016000805160206200398783398151915262001141565b60001b600019620000d160201b62000f441760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b6200136a565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000f481760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000f441760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001141565b60001b84620000d160201b62000f441760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001141565b60001b8360000151620000d160201b62000f441760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001141565b60001b8360200151620000d160201b62000f441760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001141565b60001b8360400151620000d160201b62000f441760201c565b6200038f6200037660017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762001141565b60001b8360600151620000d160201b62000f441760201c565b620003c8620003af60016000805160206200396783398151915262001141565b60001b8360800151620000d160201b62000f441760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001141565b60001b8360a00151620000d160201b62000f441760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a29565b6200044162000d6d565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d9a565b565b6200056762000e01565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e5d565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062003927833981519152836040516200062291906200118a565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062003927833981519152836040516200068591906200118a565b60405180910390a3505050565b6200069c62000d6d565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200398783398151915262001141565b60001b62000eaf60201b620006d71760201c565b6000036200055b576200055b6200078b60016000805160206200398783398151915262001141565b60001b43620000d160201b62000f441760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015620007ea5750620007e862000eb3565b155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085a9190620011bf565b60ff1614620008c35760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b600062000943826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000932919081019062001201565b62000ee760201b62000f641760201c565b905060006200098a836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b9050620009a6836012848462000f7f60201b620010071760201c565b620009b06200105b565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801562000a0b57600080fd5b505af115801562000a20573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000ab85760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b295760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b4b9190620012b9565b63ffffffff16111562000b905760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b6000816020015160ff161162000c015760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c23908290620012e4565b62000c2f919062001316565b63ffffffff161462000caa5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d959063ffffffff6a010000000000000000000082048116911662001345565b905090565b600054610100900460ff1662000df65760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e5d565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b60008062000ec06200107d565b506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b600060208251111562000f635760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f79826200109e60201b620010d91760201c565b92915050565b62000fc962000f9f6001600080516020620038e783398151915262001141565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000f441760201c565b6200100f62000ffa60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001141565b60001b83620000d160201b62000f441760201c565b620010556200104060017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001141565b60001b82620000d160201b62000f441760201c565b50505050565b600062000d956200074f60016000805160206200396783398151915262001141565b60008062001095620010c860201b620011021760201c565b90939092509050565b805160218110620010b75763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60008080620010ec6200074f6001600080516020620038e783398151915262001141565b6001600160a01b03811693509050826200111f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b634e487b7160e01b600052601160045260246000fd5b6000828210156200115657620011566200112b565b500390565b60005b83811015620011785781810151838201526020016200115e565b83811115620010555750506000910152565b6020815260008251806020840152620011ab8160408501602087016200115b565b601f01601f19169190910160400192915050565b600060208284031215620011d257600080fd5b815160ff81168114620011e457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200121457600080fd5b81516001600160401b03808211156200122c57600080fd5b818401915084601f8301126200124157600080fd5b815181811115620012565762001256620011eb565b604051601f8201601f19908116603f01168101908382118183101715620012815762001281620011eb565b816040528281528760208487010111156200129b57600080fd5b620012ae8360208301602088016200115b565b979650505050505050565b600063ffffffff808316818516808303821115620012db57620012db6200112b565b01949350505050565b600063ffffffff808416806200130a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156200133c576200133c6200112b565b02949350505050565b60006001600160401b03828116848216808303821115620012db57620012db6200112b565b61256d806200137a6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -4629,13 +4629,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000496200003260016000805160206200398783398151915262001141565b60001b600019620000d160201b62000f441760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b6200136a565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000f481760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000f441760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001141565b60001b84620000d160201b62000f441760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001141565b60001b8360000151620000d160201b62000f441760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001141565b60001b8360200151620000d160201b62000f441760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001141565b60001b8360400151620000d160201b62000f441760201c565b6200038f6200037660017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762001141565b60001b8360600151620000d160201b62000f441760201c565b620003c8620003af60016000805160206200396783398151915262001141565b60001b8360800151620000d160201b62000f441760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001141565b60001b8360a00151620000d160201b62000f441760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a29565b6200044162000d6d565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d9a565b565b6200056762000e01565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e5d565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062003927833981519152836040516200062291906200118a565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062003927833981519152836040516200068591906200118a565b60405180910390a3505050565b6200069c62000d6d565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200398783398151915262001141565b60001b62000eaf60201b620006d71760201c565b6000036200055b576200055b6200078b60016000805160206200398783398151915262001141565b60001b43620000d160201b62000f441760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015620007ea5750620007e862000eb3565b155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085a9190620011bf565b60ff1614620008c35760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b600062000943826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000932919081019062001201565b62000ee760201b62000f641760201c565b905060006200098a836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b9050620009a6836012848462000f7f60201b620010071760201c565b620009b06200105b565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801562000a0b57600080fd5b505af115801562000a20573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000ab85760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b295760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b4b9190620012b9565b63ffffffff16111562000b905760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b6000816020015160ff161162000c015760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c23908290620012e4565b62000c2f919062001316565b63ffffffff161462000caa5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d959063ffffffff6a010000000000000000000082048116911662001345565b905090565b600054610100900460ff1662000df65760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e5d565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b60008062000ec06200107d565b506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b600060208251111562000f635760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f79826200109e60201b620010d91760201c565b92915050565b62000fc962000f9f6001600080516020620038e783398151915262001141565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000f441760201c565b6200100f62000ffa60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001141565b60001b83620000d160201b62000f441760201c565b620010556200104060017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001141565b60001b82620000d160201b62000f441760201c565b50505050565b600062000d956200074f60016000805160206200396783398151915262001141565b60008062001095620010c860201b620011021760201c565b90939092509050565b805160218110620010b75763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60008080620010ec6200074f6001600080516020620038e783398151915262001141565b6001600160a01b03811693509050826200111f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b634e487b7160e01b600052601160045260246000fd5b6000828210156200115657620011566200112b565b500390565b60005b83811015620011785781810151838201526020016200115e565b83811115620010555750506000910152565b6020815260008251806020840152620011ab8160408501602087016200115b565b601f01601f19169190910160400192915050565b600060208284031215620011d257600080fd5b815160ff81168114620011e457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200121457600080fd5b81516001600160401b03808211156200122c57600080fd5b818401915084601f8301126200124157600080fd5b815181811115620012565762001256620011eb565b604051601f8201601f19908116603f01168101908382118183101715620012815762001281620011eb565b816040528281528760208487010111156200129b57600080fd5b620012ae8360208301602088016200115b565b979650505050505050565b600063ffffffff808316818516808303821115620012db57620012db6200112b565b01949350505050565b600063ffffffff808416806200130a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156200133c576200133c6200112b565b02949350505050565b60006001600160401b03828116848216808303821115620012db57620012db6200112b565b61256d806200137a6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", - "deployedCode": "0x608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000496200003260016000805160206200398783398151915262001141565b60001b600019620000d160201b62000f441760201c565b6040805160c080820183526001808352602080840182905260028486015260006060808601829052608080870183905260a0808801849052885160e081018a528481529485018490529784018390529083018290528201819052948101859052918201849052620000cb9361dead9390928392839290918391908290620000d5565b6200136a565b9055565b600054610100900460ff1615808015620000f65750600054600160ff909116105b806200012657506200011330620004e660201b62000f481760201c565b15801562000126575060005460ff166001145b6200018f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015620001b3576000805461ff0019166101001790555b620001bd620004f5565b620001c88a6200055d565b620001d387620005dc565b620001df89896200062e565b620001ea8662000692565b620002217f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0886620000d160201b62000f441760201c565b620002676200025260017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc59862001141565b60001b84620000d160201b62000f441760201c565b620002b16200029860017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce958063762001141565b60001b8360000151620000d160201b62000f441760201c565b620002fb620002e260017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a862001141565b60001b8360200151620000d160201b62000f441760201c565b620003456200032c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad637762001141565b60001b8360400151620000d160201b62000f441760201c565b6200038f6200037660017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa90762001141565b60001b8360600151620000d160201b62000f441760201c565b620003c8620003af60016000805160206200396783398151915262001141565b60001b8360800151620000d160201b62000f441760201c565b62000412620003f960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d62001141565b60001b8360a00151620000d160201b62000f441760201c565b6200041c6200072f565b60c08201516200042c90620007a0565b620004378462000a29565b6200044162000d6d565b6001600160401b0316866001600160401b03161015620004935760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b8015620004da576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6001600160a01b03163b151590565b600054610100900460ff16620005515760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b62000d9a565b565b6200056762000e01565b6001600160a01b038116620005ce5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000186565b620005d98162000e5d565b50565b60678190556040805160208082018490528251808303909101815290820190915260005b600060008051602062003927833981519152836040516200062291906200118a565b60405180910390a35050565b60658290556066819055604080516020810184905290810182905260009060600160408051601f1981840301815291905290506001600060008051602062003927833981519152836040516200068591906200118a565b60405180910390a3505050565b6200069c62000d6d565b6001600160401b0316816001600160401b03161015620006ee5760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b606880546001600160401b0319166001600160401b038316908117909155604080516020808201939093528151808203909301835281019052600262000600565b620007636200074f60016000805160206200398783398151915262001141565b60001b62000eaf60201b620006d71760201c565b6000036200055b576200055b6200078b60016000805160206200398783398151915262001141565b60001b43620000d160201b62000f441760201c565b6001600160a01b03811615801590620007d657506001600160a01b03811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b8015620007ea5750620007e862000eb3565b155b15620005d957601260ff16816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000834573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200085a9190620011bf565b60ff1614620008c35760405162461bcd60e51b815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201526d39903830bcb4b733903a37b5b2b760911b606482015260840162000186565b600062000943826001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262000932919081019062001201565b62000ee760201b62000f641760201c565b905060006200098a836001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801562000908573d6000803e3d6000fd5b9050620009a6836012848462000f7f60201b620010071760201c565b620009b06200105b565b6040516371cfaa3f60e01b81526001600160a01b03858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801562000a0b57600080fd5b505af115801562000a20573d6000803e3d6000fd5b50505050505050565b8060a001516001600160801b0316816060015163ffffffff16111562000ab85760405162461bcd60e51b815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840162000186565b6001816040015160ff161162000b295760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201526e65206c6172676572207468616e203160881b606482015260840162000186565b606854608082015182516001600160401b039092169162000b4b9190620012b9565b63ffffffff16111562000b905760405162461bcd60e51b815260206004820152601f602482015260008051602062003907833981519152604482015260640162000186565b6000816020015160ff161162000c015760405162461bcd60e51b815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201526e06965722063616e6e6f74206265203608c1b606482015260840162000186565b8051602082015163ffffffff82169160ff9091169062000c23908290620012e4565b62000c2f919062001316565b63ffffffff161462000caa5760405162461bcd60e51b815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840162000186565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff96871664ffffffffff199095169490941764010000000060ff948516021764ffffffffff60281b191665010000000000939092169290920263ffffffff60301b19161766010000000000009185169190910217600160501b600160f01b0319166a01000000000000000000009390941692909202600160701b600160f01b03191692909217600160701b6001600160801b0390921691909102179055565b60695460009062000d959063ffffffff6a010000000000000000000082048116911662001345565b905090565b600054610100900460ff1662000df65760405162461bcd60e51b815260206004820152602b60248201526000805160206200394783398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000186565b6200055b3362000e5d565b6033546001600160a01b031633146200055b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000186565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b5490565b60008062000ec06200107d565b506001600160a01b031673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b600060208251111562000f635760405162461bcd60e51b815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e20333220627974657300000000000000000000606482015260840162000186565b62000f79826200109e60201b620010d91760201c565b92915050565b62000fc962000f9f6001600080516020620038e783398151915262001141565b60001b856001600160a01b031660a08660ff16901b1760001b620000d160201b62000f441760201c565b6200100f62000ffa60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d62001141565b60001b83620000d160201b62000f441760201c565b620010556200104060017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd0576462001141565b60001b82620000d160201b62000f441760201c565b50505050565b600062000d956200074f60016000805160206200396783398151915262001141565b60008062001095620010c860201b620011021760201c565b90939092509050565b805160218110620010b75763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b60008080620010ec6200074f6001600080516020620038e783398151915262001141565b6001600160a01b03811693509050826200111f575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b634e487b7160e01b600052601160045260246000fd5b6000828210156200115657620011566200112b565b500390565b60005b83811015620011785781810151838201526020016200115e565b83811115620010555750506000910152565b6020815260008251806020840152620011ab8160408501602087016200115b565b601f01601f19169190910160400192915050565b600060208284031215620011d257600080fd5b815160ff81168114620011e457600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156200121457600080fd5b81516001600160401b03808211156200122c57600080fd5b818401915084601f8301126200124157600080fd5b815181811115620012565762001256620011eb565b604051601f8201601f19908116603f01168101908382118183101715620012815762001281620011eb565b816040528281528760208487010111156200129b57600080fd5b620012ae8360208301602088016200115b565b979650505050505050565b600063ffffffff808316818516808303821115620012db57620012db6200112b565b01949350505050565b600063ffffffff808416806200130a57634e487b7160e01b600052601260045260246000fd5b92169190910492915050565b600063ffffffff808316818516818304811182151516156200133c576200133c6200112b565b02949350505050565b60006001600160401b03828116848216808303821115620012db57620012db6200112b565b61256d806200137a6000396000f3fe608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f77001d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420694b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ada11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0", + "deployedCode": "0x608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -4643,7 +4643,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4651,7 +4651,7 @@ "slot": "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4659,7 +4659,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4667,7 +4667,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4675,7 +4675,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4683,7 +4683,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -4691,7 +4691,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -4699,7 +4699,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4707,7 +4707,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4715,7 +4715,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4723,7 +4723,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4731,7 +4731,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", "previousValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", @@ -4739,7 +4739,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", "previousValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", @@ -4747,7 +4747,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000004e59b44847b379578588920ca78fbf26c0b4956c", @@ -4755,7 +4755,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4763,7 +4763,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000067" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4771,7 +4771,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000065" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4779,7 +4779,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000066" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4787,7 +4787,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4795,7 +4795,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4803,7 +4803,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4811,7 +4811,7 @@ "slot": "0x65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4819,7 +4819,7 @@ "slot": "0x71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc597" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4827,7 +4827,7 @@ "slot": "0x383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580636" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4835,7 +4835,7 @@ "slot": "0x46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a7" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4843,7 +4843,7 @@ "slot": "0x9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6376" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4851,7 +4851,7 @@ "slot": "0x52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa906" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4859,7 +4859,7 @@ "slot": "0x4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ac" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4867,7 +4867,7 @@ "slot": "0xa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320c" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "previousValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", @@ -4875,7 +4875,7 @@ "slot": "0xa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb19f" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -4883,7 +4883,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000068" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4891,7 +4891,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000020100000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -4899,7 +4899,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000020100000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000020100000001", @@ -4907,7 +4907,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000069" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4915,7 +4915,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -4944,7 +4944,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4958,7 +4958,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000020100000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000020100000001", @@ -4970,7 +4970,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -4984,7 +4984,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -4996,7 +4996,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5010,7 +5010,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5022,7 +5022,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5036,7 +5036,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5048,7 +5048,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5062,7 +5062,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5074,7 +5074,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5088,7 +5088,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5100,7 +5100,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5114,7 +5114,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5126,7 +5126,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5140,7 +5140,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "previousValue": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", @@ -5152,7 +5152,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5166,7 +5166,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5178,7 +5178,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5192,7 +5192,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5204,7 +5204,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5218,7 +5218,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5230,7 +5230,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5244,7 +5244,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5256,7 +5256,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5270,7 +5270,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5282,7 +5282,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5296,7 +5296,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5308,7 +5308,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5322,7 +5322,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5373,7 +5373,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f21806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f21806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -5385,13 +5385,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f21806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f21806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", + "deployedCode": "0x6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -5399,7 +5399,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5407,7 +5407,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5415,7 +5415,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5423,7 +5423,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5431,7 +5431,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5439,7 +5439,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5447,7 +5447,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5455,7 +5455,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5463,7 +5463,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5471,7 +5471,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5479,7 +5479,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5487,7 +5487,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5495,7 +5495,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5503,7 +5503,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5511,7 +5511,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5519,7 +5519,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5527,7 +5527,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5556,7 +5556,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5570,7 +5570,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5582,7 +5582,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5596,7 +5596,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5608,7 +5608,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5622,7 +5622,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5634,7 +5634,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5648,7 +5648,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5660,7 +5660,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5674,7 +5674,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -6269,7 +6269,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -6295,7 +6295,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c760000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004a000000000000000000000000000000000000000000000000000000000000003249623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -6361,7 +6361,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -6395,7 +6395,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef286000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef286000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002844c1e843d0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc000000000000000000000000000000000000000000000000000000000000083400000000000000000000000000000000000000000000000000000000000f42400000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc00000000000000000000000000000000000000000000000000000000017d78400000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc0000000000000000000000000000000000000000000000000000000001312d00000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000003b9aca0000000000000000000000000000000000000000000000000000000000000f424000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000ff0000000000000000000000000000000000000000000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000def3bca8c80064589e6787477ffa7dd616b5574f0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee00000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -6414,7 +6414,7 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": true, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -6424,7 +6424,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6738,8 +6738,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6748,7 +6748,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6781,8 +6781,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6791,7 +6791,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6859,8 +6859,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6869,7 +6869,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -6937,8 +6937,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -6947,7 +6947,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7015,8 +7015,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7025,7 +7025,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7093,8 +7093,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7103,7 +7103,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7171,8 +7171,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7181,7 +7181,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7249,8 +7249,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7259,7 +7259,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7327,8 +7327,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7337,7 +7337,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7405,8 +7405,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7415,7 +7415,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7457,8 +7457,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7467,7 +7467,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7509,8 +7509,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7519,7 +7519,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7561,8 +7561,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7571,7 +7571,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7613,8 +7613,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7623,7 +7623,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7665,8 +7665,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7675,7 +7675,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7717,8 +7717,8 @@ { "account": "0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4", "isWrite": false, - "newValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", - "previousValue": "0x000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6", + "newValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", + "previousValue": "0x000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -7727,7 +7727,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6", + "account": "0x809abd1c13738dE7a76C85839779FCaa59FA32CE", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -7978,7 +7978,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8004,7 +8004,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -8070,7 +8070,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa6000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8137,7 +8137,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8156,7 +8156,7 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -8234,8 +8234,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", - "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8244,7 +8244,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8466,8 +8466,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", - "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8476,7 +8476,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8561,8 +8561,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", - "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8571,7 +8571,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8665,8 +8665,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", - "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8675,7 +8675,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8769,8 +8769,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", - "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8779,7 +8779,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8873,8 +8873,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", - "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8883,7 +8883,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8977,8 +8977,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", - "previousValue": "0x000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d", + "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8987,7 +8987,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d", + "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -9873,7 +9873,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x238181ae000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "data": "0x238181ae000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", "deployedCode": "0x", "initialized": true, "kind": "StaticCall", @@ -9887,7 +9887,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xeda6be1d2f490d5ea6156bde71fc67ebaa485e03a0acbba88a696f9a54c7b9ae" + "slot": "0x130727a1e38e003a4a83c345938c34d2eb51450595da938f77fdc3d81ddefae9" }, { "account": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", @@ -9895,7 +9895,7 @@ "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, - "slot": "0xeda6be1d2f490d5ea6156bde71fc67ebaa485e03a0acbba88a696f9a54c7b9ae" + "slot": "0x130727a1e38e003a4a83c345938c34d2eb51450595da938f77fdc3d81ddefae9" } ], "value": 0 @@ -10083,7 +10083,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c7300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd9900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10109,7 +10109,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c7300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd9900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -10175,7 +10175,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c7300000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd9900000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000978e3286eb805934215a88694d80b09aded68d900000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10274,7 +10274,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b2ea4bd0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", + "data": "0x9b2ea4bd0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99000000000000000000000000000000000000000000000000000000000000001a4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -10301,7 +10301,7 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": true, - "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "newValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" @@ -10361,8 +10361,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", - "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "newValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", + "previousValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10371,7 +10371,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10599,8 +10599,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", - "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "newValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", + "previousValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10609,7 +10609,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10676,8 +10676,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", - "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "newValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", + "previousValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10686,7 +10686,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10762,8 +10762,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", - "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "newValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", + "previousValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10772,7 +10772,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10848,8 +10848,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", - "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "newValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", + "previousValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10858,7 +10858,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -10934,8 +10934,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", - "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "newValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", + "previousValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -10944,7 +10944,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11020,8 +11020,8 @@ { "account": "0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3", "isWrite": false, - "newValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", - "previousValue": "0x000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73", + "newValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", + "previousValue": "0x000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99", "reverted": false, "slot": "0x515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e" } @@ -11030,7 +11030,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x596ee4c67e4f7770b116faf6D8950d17A2e21C73", + "account": "0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11095,7 +11095,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd9266400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b05100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11121,7 +11121,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd9266400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b05100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -11187,7 +11187,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd9266400000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b05100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11221,7 +11221,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef286000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd9266400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef286000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b05100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11240,7 +11240,7 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": true, - "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -11250,7 +11250,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11444,8 +11444,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", - "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11454,7 +11454,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11530,8 +11530,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", - "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11540,7 +11540,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11582,8 +11582,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", - "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11592,7 +11592,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11634,8 +11634,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", - "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11644,7 +11644,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11738,8 +11738,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", - "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11748,7 +11748,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11842,8 +11842,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", - "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11852,7 +11852,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11946,8 +11946,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", - "previousValue": "0x000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664", + "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11956,7 +11956,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x885CB363B4F55C29E3497cD78b34fc863Fd92664", + "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", "chainInfo": { "chainId": 31337, "forkId": 0 diff --git a/packages/contracts-bedrock/src/L2/L1Block.sol b/packages/contracts-bedrock/src/L2/L1Block.sol index c8dee6424f0..50880fd7661 100644 --- a/packages/contracts-bedrock/src/L2/L1Block.sol +++ b/packages/contracts-bedrock/src/L2/L1Block.sol @@ -21,7 +21,9 @@ contract L1Block is ISemver, IGasToken { event GasPayingTokenSet(address indexed token, uint8 indexed decimals, bytes32 name, bytes32 symbol); /// @notice Address of the special depositor account. - address public constant DEPOSITOR_ACCOUNT = Constants.DEPOSITOR_ACCOUNT; + function DEPOSITOR_ACCOUNT() public pure returns (address addr_) { + addr_ = Constants.DEPOSITOR_ACCOUNT; + } /// @notice The latest L1 block number known by the L2 system. uint64 public number; @@ -110,7 +112,7 @@ contract L1Block is ISemver, IGasToken { ) external { - require(msg.sender == DEPOSITOR_ACCOUNT, "L1Block: only the depositor account can set L1 block values"); + require(msg.sender == DEPOSITOR_ACCOUNT(), "L1Block: only the depositor account can set L1 block values"); number = _number; timestamp = _timestamp; @@ -135,9 +137,10 @@ contract L1Block is ISemver, IGasToken { /// 8. _hash L1 blockhash. /// 9. _batcherHash Versioned hash to authenticate batcher by. function setL1BlockValuesEcotone() external { + address depositor = DEPOSITOR_ACCOUNT(); assembly { // Revert if the caller is not the depositor account. - if xor(caller(), DEPOSITOR_ACCOUNT) { + if xor(caller(), depositor) { mstore(0x00, 0x3cc50b45) // 0x3cc50b45 is the 4-byte selector of "NotDepositor()" revert(0x1C, 0x04) // returns the stored 4-byte selector from above } @@ -156,7 +159,7 @@ contract L1Block is ISemver, IGasToken { /// depositor account. This function is not called on every L2 block but instead /// only called by specially crafted L1 deposit transactions. function setGasPayingToken(address _token, uint8 _decimals, bytes32 _name, bytes32 _symbol) external { - if (msg.sender != DEPOSITOR_ACCOUNT) revert NotDepositor(); + if (msg.sender != DEPOSITOR_ACCOUNT()) revert NotDepositor(); GasPayingToken.set({ _token: _token, _decimals: _decimals, _name: _name, _symbol: _symbol }); diff --git a/packages/contracts-bedrock/src/L2/L1BlockInterop.sol b/packages/contracts-bedrock/src/L2/L1BlockInterop.sol index 866573ad15c..ea0d29e856c 100644 --- a/packages/contracts-bedrock/src/L2/L1BlockInterop.sol +++ b/packages/contracts-bedrock/src/L2/L1BlockInterop.sol @@ -37,9 +37,10 @@ contract L1BlockInterop is L1Block { /// 10. _dependencySetSize Size of the interop dependency set. /// 11. _dependencySet Array of chain IDs for the interop dependency set. function setL1BlockValuesInterop() external { + address depositor = DEPOSITOR_ACCOUNT(); assembly { // Revert if the caller is not the depositor account. - if xor(caller(), DEPOSITOR_ACCOUNT) { + if xor(caller(), depositor) { mstore(0x00, 0x3cc50b45) // 0x3cc50b45 is the 4-byte selector of "NotDepositor()" revert(0x1C, 0x04) // returns the stored 4-byte selector from above } diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index dcca8cb13c5..889156a7434 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -68,10 +68,6 @@ contract OptimismPortal_Test is CommonTest { assertEq(prevBaseFee, 1 gwei); assertEq(prevBoughtGas, 0); assertEq(prevBlockNum, uint64(block.number)); - (address token, uint8 decimals) = optimismPortal.gasPayingToken(); - (address expectedToken, uint8 expectedDecimals) = systemConfig.gasPayingToken(); - assertEq(token, expectedToken); - assertEq(decimals, expectedDecimals); } /// @dev Tests that `pause` successfully pauses @@ -180,7 +176,7 @@ contract OptimismPortal_Test is CommonTest { uint256 prevBalance = address(optimismPortal).balance; // Ensure that no custom gas token is set - (address gasPayingToken,) = optimismPortal.gasPayingToken(); + (address gasPayingToken,) = systemConfig.gasPayingToken(); assertEq(gasPayingToken, Constants.ETHER); bytes memory opaqueData = abi.encodePacked(_mint, _value, _gasLimit, _isCreation, _data); @@ -448,23 +444,6 @@ contract OptimismPortal_Test is CommonTest { assertEq(optimismPortal.isOutputFinalized(nextOutputIndex + 1), false); } - /// @dev Tests that gasPayingToken returns the correct values for ETH. - function test_gasPayingToken_ether_succeeds() external view { - (address token, uint8 decimals) = optimismPortal.gasPayingToken(); - assertEq(token, Constants.ETHER); - assertEq(decimals, 18); - } - - /// @dev Tests that gasPayingToken returns the correct values for non-ETH tokens. - function test_gasPayingToken_nonEther_succeeds() external { - vm.mockCall( - address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) - ); - (address token, uint8 decimals) = optimismPortal.gasPayingToken(); - assertEq(token, address(1)); - assertEq(decimals, 2); - } - /// @dev Tests that the gas paying token can be set. function testFuzz_setGasPayingToken_succeeds( address _token, @@ -501,7 +480,7 @@ contract OptimismPortal_Test is CommonTest { /// @dev Tests that `depositERC20Transaction` reverts when the gas paying token is ether. function test_depositERC20Transaction_noCustomGasToken_reverts() external { // Check that the gas paying token is set to ether - (address token,) = optimismPortal.gasPayingToken(); + (address token,) = systemConfig.gasPayingToken(); assertEq(token, Constants.ETHER); vm.expectRevert(OnlyCustomGasToken.selector); @@ -511,7 +490,7 @@ contract OptimismPortal_Test is CommonTest { /// @dev Tests that `balance()` returns the correct balance when the gas paying token is ether. function testFuzz_balance_ether_succeeds(uint256 _amount) external { // Check that the gas paying token is set to ether - (address token,) = optimismPortal.gasPayingToken(); + (address token,) = systemConfig.gasPayingToken(); assertEq(token, Constants.ETHER); // Increase the balance of the gas paying token diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index 3bec03f8474..b27f7b0b90e 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -13,15 +13,15 @@ contract DeploymentSummary is DeploymentSummaryCode { Vm private constant vm = Vm(VM_ADDRESS); address internal constant addressManagerAddress = 0xBb2180ebd78ce97360503434eD37fcf4a1Df61c3; - address internal constant l1CrossDomainMessengerAddress = 0x596ee4c67e4f7770b116faf6D8950d17A2e21C73; + address internal constant l1CrossDomainMessengerAddress = 0xf3E6CBcbF1AE12Fc13Bc8B14FA8A67CbE147fD99; address internal constant l1CrossDomainMessengerProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; address internal constant l1ERC721BridgeAddress = 0x44637A4292E0CD2B17A55d5F6B2F05AFcAcD0586; address internal constant l1ERC721BridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant l1StandardBridgeAddress = 0xD874148754B4DB9FC90D3a7972B19dfae1CdEf6d; + address internal constant l1StandardBridgeAddress = 0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6; address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; - address internal constant optimismPortalAddress = 0x885CB363B4F55C29E3497cD78b34fc863Fd92664; + address internal constant optimismPortalAddress = 0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; @@ -30,7 +30,7 @@ contract DeploymentSummary is DeploymentSummaryCode { address internal constant safeSingletonAddress = 0x90193C961A926261B756D1E5bb255e67ff9498A1; address internal constant superchainConfigAddress = 0x068E44eB31e111028c41598E4535be7468674D0A; address internal constant superchainConfigProxyAddress = 0xDEb1E9a6Be7Baf84208BB6E10aC9F9bbE1D70809; - address internal constant systemConfigAddress = 0xdF95Fb7B3aB12D684cCE0C0884262FFeaC7C4BE6; + address internal constant systemConfigAddress = 0x809abd1c13738dE7a76C85839779FCaa59FA32CE; address internal constant systemConfigProxyAddress = 0x1c23A6d89F95ef3148BCDA8E242cAb145bf9c0E4; address internal constant systemOwnerSafeAddress = 0x2601573C28B77dea6C8B73385c25024A28a00C3F; @@ -281,7 +281,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000003"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000df95fb7b3ab12d684cce0c0884262ffeac7c4be6"; + value = hex"000000000000000000000000809abd1c13738de7a76c85839779fcaa59fa32ce"; vm.store(systemConfigProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -344,7 +344,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000005"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000d874148754b4db9fc90d3a7972b19dfae1cdef6d"; + value = hex"0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; @@ -407,7 +407,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000009"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"515216935740e67dfdda5cf8e248ea32b3277787818ab59153061ac875c9385e"; - value = hex"000000000000000000000000596ee4c67e4f7770b116faf6d8950d17a2e21c73"; + value = hex"000000000000000000000000f3e6cbcbf1ae12fc13bc8b14fa8a67cbe147fd99"; vm.store(addressManagerAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000010000000000000000000000000000000000000000"; @@ -437,7 +437,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"000000000000000000000000000000000000000000000000000000000000000a"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000885cb363b4f55c29e3497cd78b34fc863fd92664"; + value = hex"000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index c80bf17f231..09ee8938acb 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -35,15 +35,15 @@ contract DeploymentSummaryCode { bytes internal constant l1ERC721BridgeProxyCode = hex"60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a"; bytes internal constant optimismPortalCode = - hex"60806040526004361061016e5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063cff0ab9611610059578063cff0ab961461049c578063e965084c1461053d578063e9e05c42146105c957600080fd5b8063a35d99df14610420578063b69ef8a814610459578063c0c53b8b1461047c57600080fd5b80639b5f694a116100b05780639b5f694a146103965780639bf62d82146103c3578063a14238e7146103f057600080fd5b80638b4c40b0146101935780638c3152e91461037657600080fd5b80634870496f116101225780635c975abb116101075780635c975abb146103115780636dbffb781461033657806371cfaa3f1461035657600080fd5b80634870496f1461029b57806354fd4d50146102bb57600080fd5b806335e80ab31161015357806335e80ab3146102115780634397dfef14610243578063452a93201461028657600080fd5b8063149f2f221461019a57806333d7e2bd146101ba57600080fd5b36610195576101933334620186a06000604051806020016040528060008152506105d7565b005b600080fd5b3480156101a657600080fd5b506101936101b536600461538d565b61067c565b3480156101c657600080fd5b506037546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021d57600080fd5b506035546101e790610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024f57600080fd5b506102586108be565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff909116602083015201610208565b34801561029257600080fd5b506101e761095b565b3480156102a757600080fd5b506101936102b63660046154c1565b6109f3565b3480156102c757600080fd5b506103046040518060400160405280601b81526020017f322e372e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102089190615613565b34801561031d57600080fd5b50610326610fa0565b6040519015158152602001610208565b34801561034257600080fd5b50610326610351366004615626565b611033565b34801561036257600080fd5b5061019361037136600461564e565b6110ee565b34801561038257600080fd5b50610193610391366004615694565b6112b0565b3480156103a257600080fd5b506036546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103cf57600080fd5b506032546101e79073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103fc57600080fd5b5061032661040b366004615626565b60336020526000908152604090205460ff1681565b34801561042c57600080fd5b5061044061043b3660046156d1565b611d32565b60405167ffffffffffffffff9091168152602001610208565b34801561046557600080fd5b5061046e611d4b565b604051908152602001610208565b34801561048857600080fd5b506101936104973660046156ec565b611da5565b3480156104a857600080fd5b50600154610504906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff9283166020850152911690820152606001610208565b34801561054957600080fd5b5061059b610558366004615626565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff9283166020850152911690820152606001610208565b6101936105d7366004615737565b8260005a905060006105e76108be565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480159061062357503415155b1561065a576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61066888348989898961200f565b5061067382826121bb565b50505050505050565b8260005a9050600061068c6108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106fe576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561076b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078f91906157b4565b90506107b373ffffffffffffffffffffffffffffffffffffffff831633308c612488565b6107bd89826157fc565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015610827573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084b91906157b4565b14610882576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461089491906157fc565b909155506108a890508a8a8a8a8a8a61200f565b50506108b482826121bb565b5050505050505050565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa15801561092e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109529190615814565b90939092509050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee919061584e565b905090565b6109fb610fa0565b15610a32576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a9b576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2f919061588b565b519050610b49610b44368690038601866158f0565b612564565b8114610bdc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610be7876125c0565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610cfd5750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610cd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf9919061588b565b5114155b610d89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610bd3565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610e529101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610e48888a615956565b8a604001356125f0565b610ede576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610bd3565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee91906159da565b6036546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110e89173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd919061588b565b602001516fffffffffffffffffffffffffffffffff16612614565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461113f576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61114b620138806126ba565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f000000000000000000000000000000000000000000000000000000001790529051611268969594939291016159f7565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526112a091615613565b60405180910390a450505050565b565b6112b8610fa0565b156112ef576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611342576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061134d826125c0565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611438576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610bd3565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c991906157b4565b81602001516fffffffffffffffffffffffffffffffff161015611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610bd3565b6115b381602001516fffffffffffffffffffffffffffffffff16612614565b611665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156116ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611710919061588b565b82518151919250146117ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610bd3565b6117e981602001516fffffffffffffffffffffffffffffffff16612614565b61189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610bd3565b60008381526033602052604090205460ff161561193a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610bd3565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806119c56108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611a2857611a218660400151876080015188606001518960a00151612716565b9150611c7b565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff1603611a91576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611c52578560600151603d6000828254611ab19190615a5c565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611b23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4791906157b4565b9050611b7c876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127749092919063ffffffff16565b6060870151611b8b9082615a5c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c1991906157b4565b14611c50576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611c7657611a218660400151876080015160008960a00151612716565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611cdd90851515815260200190565b60405180910390a281158015611cf35750326001145b15611d2a576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611d3f826010615a73565b6110e890615208615aa3565b600080611d566108be565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d9d574791505090565b5050603d5490565b600054610100900460ff1615808015611dc55750600054600160ff909116105b80611ddf5750303b158015611ddf575060005460ff166001145b611e6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610bd3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ec957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611f8257603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611f8a6127cf565b8015611fed57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b818015612031575073ffffffffffffffffffffffffffffffffffffffff861615155b15612068576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120728151611d32565b67ffffffffffffffff168367ffffffffffffffff1610156120bf576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120fd576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3332811461211e575033731111000000000000000000000000000000001111015b600086868686866040516020016121399594939291906159f7565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516121a99190615613565b60405180910390a45050505050505050565b6001546000906121f1907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643615a5c565b905060006121fd6128e2565b90506000816020015160ff16826000015163ffffffff1661221e9190615afe565b9050821561235557600154600090612255908390700100000000000000000000000000000000900467ffffffffffffffff16615b66565b90506000836040015160ff168361226c9190615bda565b60015461228c9084906fffffffffffffffffffffffffffffffff16615bda565b6122969190615afe565b6001549091506000906122e7906122c09084906fffffffffffffffffffffffffffffffff16615c96565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166129a3565b90506001861115612316576123136122c082876040015160ff1660018a61230e9190615a5c565b6129c2565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612388908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315612415576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154600090612441906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615d0a565b9050600061245348633b9aca00612a17565b61245d9083615d47565b905060005a61246c9088615a5c565b9050808211156108b4576108b46124838284615a5c565b612a2e565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611fed9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a57565b600081600001518260200151836040015184606001516040516020016125a3949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a088015193516000976125a3979096959101615d5b565b6000806125fc86612b63565b905061260a81868686612b95565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a891906157b4565b6126b290836157fc565b421192915050565b600180548291906010906126ed908490700100000000000000000000000000000000900467ffffffffffffffff16615aa3565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b6000806000612726866000612bc5565b90508061275c576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127ca9084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064016124e2565b505050565b600054610100900460ff16612866576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610bd3565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036112ae5760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561297f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ee9190615dc6565b60006129b86129b28585612be3565b83612bf3565b90505b9392505050565b6000670de0b6b3a7640000612a036129da8583615afe565b6129ec90670de0b6b3a7640000615b66565b6129fe85670de0b6b3a7640000615bda565b612c02565b612a0d9086615bda565b6129b89190615afe565b600081831015612a2757816129bb565b5090919050565b6000805a90505b825a612a419083615a5c565b10156127ca57612a5082615e69565b9150612a35565b6000612ab9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612c339092919063ffffffff16565b8051909150156127ca5780806020019051810190612ad791906159da565b6127ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bd3565b60608180519060200120604051602001612b7f91815260200190565b6040516020818303038152906040529050919050565b6000612bbc84612ba6878686612c42565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b600081831215612a2757816129bb565b6000818312612a2757816129bb565b60006129bb670de0b6b3a764000083612c1a866136c0565b612c249190615bda565b612c2e9190615afe565b613904565b60606129b88484600085613b43565b60606000845111612caf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610bd3565b6000612cba84613cd9565b90506000612cc786613dc5565b9050600084604051602001612cde91815260200190565b60405160208183030381529060405290506000805b8451811015613637576000858281518110612d1057612d10615ea1565b602002602001015190508451831115612dab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610bd3565b82600003612e645780518051602091820120604051612df992612dd392910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610bd3565b612fbb565b805151602011612f1a5780518051602091820120604051612e8e92612dd392910190815260200190565b612e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610bd3565b805184516020808701919091208251919092012014612fbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610bd3565b612fc7601060016157fc565b816020015151036131a3578451830361313b576130018160200151601081518110612ff457612ff4615ea1565b6020026020010151613e28565b96506000875111613094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610bd3565b600186516130a29190615a5c565b8214613130576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610bd3565b5050505050506129bb565b600085848151811061314f5761314f615ea1565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061317a5761317a615ea1565b6020026020010151905061318d81613f88565b955061319a6001866157fc565b94505050613624565b60028160200151510361359c5760006131bb82613fad565b90506000816000815181106131d2576131d2615ea1565b016020015160f81c905060006131e9600283615ed0565b6131f4906002615ef2565b90506000613205848360ff16613fd1565b905060006132138a89613fd1565b905060006132218383614007565b9050808351146132b3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610bd3565b60ff8516600214806132c8575060ff85166003145b156134b7578082511461335d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610bd3565b6133778760200151600181518110612ff457612ff4615ea1565b9c5060008d511161340a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610bd3565b60018c516134189190615a5c565b88146134a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610bd3565b5050505050505050505050506129bb565b60ff851615806134ca575060ff85166001145b15613509576134f687602001516001815181106134e9576134e9615ea1565b6020026020010151613f88565b9950613502818a6157fc565b9850613591565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610bd3565b505050505050613624565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610bd3565b508061362f81615e69565b915050612cf3565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610bd3565b600080821361372b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b60006060613738846140bb565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361393557506000919050565b680755bf798b4a1bf1e582126139a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610bd3565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613bd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610bd3565b73ffffffffffffffffffffffffffffffffffffffff85163b613c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bd3565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c7c9190615f15565b60006040518083038185875af1925050503d8060008114613cb9576040519150601f19603f3d011682016040523d82523d6000602084013e613cbe565b606091505b5091509150613cce828286614191565b979650505050505050565b80516060908067ffffffffffffffff811115613cf757613cf7615281565b604051908082528060200260200182016040528015613d3c57816020015b6040805180820190915260608082526020820152815260200190600190039081613d155790505b50915060005b81811015613dbe576040518060400160405280858381518110613d6757613d67615ea1565b60200260200101518152602001613d96868481518110613d8957613d89615ea1565b60200260200101516141e4565b815250838281518110613dab57613dab615ea1565b6020908102919091010152600101613d42565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613e1d578060011b82018184015160001a8060041c8253600f811660018301535050600101613def565b509295945050505050565b60606000806000613e38856141f7565b919450925090506000816001811115613e5357613e53615f31565b14613ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610bd3565b613eea82846157fc565b855114613f79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610bd3565b612bbc85602001518484614c64565b60606020826000015110613fa457613f9f82613e28565b6110e8565b6110e882614cf8565b60606110e8613fcc8360200151600081518110612ff457612ff4615ea1565b613dc5565b606082518210613ff057506040805160208101909152600081526110e8565b6129bb83838486516140029190615a5c565b614d0e565b600080825184511061401a57825161401d565b83515b90505b80821080156140a4575082828151811061403c5761403c615ea1565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061407b5761407b615ea1565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156140b457816001019150614020565b5092915050565b6000808211614126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610bd3565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606083156141a05750816129bb565b8251156141b05782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd39190615613565b60606110e86141f283614ee6565b614fcf565b6000806000808460000151116142b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b6020840151805160001a607f81116142da576000600160009450945094505050614c5d565b60b781116144e85760006142ef608083615a5c565b9050808760000151116143aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610bd3565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061442357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b6144d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610bd3565b5060019550935060009250614c5d915050565b60bf81116148365760006144fd60b783615a5c565b9050808760000151116145b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c6037811161475a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610bd3565b61476481846157fc565b895111614819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610bd3565b6148248360016157fc565b9750955060009450614c5d9350505050565b60f7811161491757600061484b60c083615a5c565b905080876000015111614906576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b600195509350849250614c5d915050565b600061492460f783615a5c565b9050808760000151116149df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610bd3565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610bd3565b600184015160088302610100031c60378111614b81576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610bd3565b614b8b81846157fc565b895111614c40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610bd3565b614c4b8360016157fc565b9750955060019450614c5d9350505050565b9193909250565b60608167ffffffffffffffff811115614c7f57614c7f615281565b6040519080825280601f01601f191660200182016040528015614ca9576020820181803683370190505b50905081156129bb576000614cbe84866157fc565b90506020820160005b84811015614cdf578281015182820152602001614cc7565b84811115614cee576000858301525b5050509392505050565b60606110e8826020015160008460000151614c64565b60608182601f011015614d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b828284011015614de9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610bd3565b81830184511015614e56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610bd3565b606082158015614e755760405191506000825260208201604052614edd565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614eae578051835260209283019201614e96565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614fb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610bd3565b50604080518082019091528151815260209182019181019190915290565b60606000806000614fdf856141f7565b919450925090506001816001811115614ffa57614ffa615f31565b14615087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610bd3565b845161509383856157fc565b14615120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610bd3565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816151375790505093506000835b8651811015615225576000806151aa6040518060400160405280858c6000015161518e9190615a5c565b8152602001858c602001516151a391906157fc565b90526141f7565b5091509150604051806040016040528083836151c691906157fc565b8152602001848b602001516151db91906157fc565b8152508885815181106151f0576151f0615ea1565b60209081029190910101526152066001856157fc565b935061521281836157fc565b61521c90846157fc565b92505050615164565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461525357600080fd5b50565b803567ffffffffffffffff8116811461526e57600080fd5b919050565b801515811461525357600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152f7576152f7615281565b604052919050565b600082601f83011261531057600080fd5b813567ffffffffffffffff81111561532a5761532a615281565b61535b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016152b0565b81815284602083860101111561537057600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c087890312156153a657600080fd5b86356153b181615231565b955060208701359450604087013593506153cd60608801615256565b925060808701356153dd81615273565b915060a087013567ffffffffffffffff8111156153f957600080fd5b61540589828a016152ff565b9150509295509295509295565b600060c0828403121561542457600080fd5b60405160c0810167ffffffffffffffff828210818311171561544857615448615281565b81604052829350843583526020850135915061546382615231565b8160208401526040850135915061547982615231565b816040840152606085013560608401526080850135608084015260a08501359150808211156154a757600080fd5b506154b4858286016152ff565b60a0830152505092915050565b600080600080600085870360e08112156154da57600080fd5b863567ffffffffffffffff808211156154f257600080fd5b6154fe8a838b01615412565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561553757600080fd5b60408901955060c089013592508083111561555157600080fd5b828901925089601f84011261556557600080fd5b823591508082111561557657600080fd5b508860208260051b840101111561558c57600080fd5b959894975092955050506020019190565b60005b838110156155b85781810151838201526020016155a0565b83811115611fed5750506000910152565b600081518084526155e181602086016020860161559d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129bb60208301846155c9565b60006020828403121561563857600080fd5b5035919050565b60ff8116811461525357600080fd5b6000806000806080858703121561566457600080fd5b843561566f81615231565b9350602085013561567f8161563f565b93969395505050506040820135916060013590565b6000602082840312156156a657600080fd5b813567ffffffffffffffff8111156156bd57600080fd5b6156c984828501615412565b949350505050565b6000602082840312156156e357600080fd5b6129bb82615256565b60008060006060848603121561570157600080fd5b833561570c81615231565b9250602084013561571c81615231565b9150604084013561572c81615231565b809150509250925092565b600080600080600060a0868803121561574f57600080fd5b853561575a81615231565b94506020860135935061576f60408701615256565b9250606086013561577f81615273565b9150608086013567ffffffffffffffff81111561579b57600080fd5b6157a7888289016152ff565b9150509295509295909350565b6000602082840312156157c657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561580f5761580f6157cd565b500190565b6000806040838503121561582757600080fd5b825161583281615231565b60208401519092506158438161563f565b809150509250929050565b60006020828403121561586057600080fd5b81516129bb81615231565b80516fffffffffffffffffffffffffffffffff8116811461526e57600080fd5b60006060828403121561589d57600080fd5b6040516060810181811067ffffffffffffffff821117156158c0576158c0615281565b604052825181526158d36020840161586b565b60208201526158e46040840161586b565b60408201529392505050565b60006080828403121561590257600080fd5b6040516080810181811067ffffffffffffffff8211171561592557615925615281565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff8084111561597157615971615281565b8360051b60206159828183016152b0565b86815291850191818101903684111561599a57600080fd5b865b848110156159ce578035868111156159b45760008081fd5b6159c036828b016152ff565b84525091830191830161599c565b50979650505050505050565b6000602082840312156159ec57600080fd5b81516129bb81615273565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251615a4b81604985016020870161559d565b919091016049019695505050505050565b600082821015615a6e57615a6e6157cd565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a9a57615a9a6157cd565b02949350505050565b600067ffffffffffffffff808316818516808303821115615ac657615ac66157cd565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615b0d57615b0d615acf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b6157615b616157cd565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615ba057615ba06157cd565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615bd457615bd46157cd565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615c1b57615c1b6157cd565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c5657615c566157cd565b60008712925087820587128484161615615c7257615c726157cd565b87850587128184161615615c8857615c886157cd565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615cd057615cd06157cd565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615d0457615d046157cd565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615d4257615d426157cd565b500290565b600082615d5657615d56615acf565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615da660c08301846155c9565b98975050505050505050565b805163ffffffff8116811461526e57600080fd5b600060c08284031215615dd857600080fd5b60405160c0810181811067ffffffffffffffff82111715615dfb57615dfb615281565b604052615e0783615db2565b81526020830151615e178161563f565b60208201526040830151615e2a8161563f565b6040820152615e3b60608401615db2565b6060820152615e4c60808401615db2565b6080820152615e5d60a0840161586b565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e9a57615e9a6157cd565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615ee357615ee3615acf565b8060ff84160691505092915050565b600060ff821660ff841680821015615f0c57615f0c6157cd565b90039392505050565b60008251615f2781846020870161559d565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; + hex"6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533f565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc610870565b34801561025957600080fd5b50610188610268366004615473565b610908565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c5565b3480156102cf57600080fd5b506102d8610eb5565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d8565b610f48565b34801561031457600080fd5b50610188610323366004615600565b611003565b34801561033457600080fd5b50610188610343366004615646565b6111c5565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d8565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615683565b611c47565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c60565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569e565b611cba565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d8565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e9565b8260005a90506000610599611f24565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc1565b50610625828261216d565b50505050505050565b8260005a9050600061063e611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190615766565b905061076573ffffffffffffffffffffffffffffffffffffffff831633308c61243a565b61076f89826157ae565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190615766565b14610834576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461084691906157ae565b9091555061085a90508a8a8a8a8a8a611fc1565b5050610866828261216d565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090391906157c6565b905090565b610910610eb5565b15610947576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109b0576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190615803565b519050610a5e610a5936869003860186615868565b612516565b8114610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afc87612572565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c125750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e9190615803565b5114155b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae8565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d679101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5d888a6158ce565b8a604001356125a2565b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae8565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615952565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffd9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe29190615803565b602001516fffffffffffffffffffffffffffffffff166125c6565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611054576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110606201388061266c565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117d9695949392910161596f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b5916155c5565b60405180910390a450505050565b565b6111cd610eb5565b15611204576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611257576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126282612572565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae8565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190615766565b81602001516fffffffffffffffffffffffffffffffff1610156114a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae8565b6114c881602001516fffffffffffffffffffffffffffffffff166125c6565b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190615803565b82518151919250146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae8565b6116fe81602001516fffffffffffffffffffffffffffffffff166125c6565b6117b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60008381526033602052604090205460ff161561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae8565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118da611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193d576119368660400151876080015188606001518960a001516126c8565b9150611b90565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b67578560600151603d60008282546119c691906159d4565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190615766565b9050611a91876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127269092919063ffffffff16565b6060870151611aa090826159d4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190615766565b14611b65576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8b576119368660400151876080015160008960a001516126c8565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf290851515815260200190565b60405180910390a281158015611c085750326001145b15611c3f576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c548260106159eb565b610ffd90615208615a1b565b600080611c6b611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb2574791505090565b5050603d5490565b600054610100900460ff1615808015611cda5750600054600160ff909116105b80611cf45750303b158015611cf4575060005460ff166001145b611d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611dde57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9757603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9f612781565b8015611f0257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190615a47565b90939092509050565b818015611fe3575073ffffffffffffffffffffffffffffffffffffffff861615155b1561201a576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120248151611c47565b67ffffffffffffffff168367ffffffffffffffff161015612071576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120af576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120d0575033731111000000000000000000000000000000001111015b600086868686866040516020016120eb95949392919061596f565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215b91906155c5565b60405180910390a45050505050505050565b6001546000906121a3907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d4565b905060006121af612894565b90506000816020015160ff16826000015163ffffffff166121d09190615ab0565b9050821561230757600154600090612207908390700100000000000000000000000000000000900467ffffffffffffffff16615b18565b90506000836040015160ff168361221e9190615b8c565b60015461223e9084906fffffffffffffffffffffffffffffffff16615b8c565b6122489190615ab0565b600154909150600090612299906122729084906fffffffffffffffffffffffffffffffff16615c48565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612955565b905060018611156122c8576122c561227282876040015160ff1660018a6122c091906159d4565b612974565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061233a908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c7576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f3906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbc565b9050600061240548633b9aca006129c9565b61240f9083615cf9565b905060005a61241e90886159d4565b9050808211156108665761086661243582846159d4565b6129e0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f029085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a09565b60008160000151826020015183604001518460600151604051602001612555949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612555979096959101615d0d565b6000806125ae86612b15565b90506125bc81868686612b47565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265a9190615766565b61266490836157ae565b421192915050565b6001805482919060109061269f908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d8866000612b77565b90508061270e576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277c9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612494565b505050565b600054610100900460ff16612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae8565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c35760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615d78565b600061296a6129648585612b95565b83612ba5565b90505b9392505050565b6000670de0b6b3a76400006129b561298c8583615ab0565b61299e90670de0b6b3a7640000615b18565b6129b085670de0b6b3a7640000615b8c565b612bb4565b6129bf9086615b8c565b61296a9190615ab0565b6000818310156129d9578161296d565b5090919050565b6000805a90505b825a6129f390836159d4565b101561277c57612a0282615e1b565b91506129e7565b6000612a6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be59092919063ffffffff16565b80519091501561277c5780806020019051810190612a899190615952565b61277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae8565b60608180519060200120604051602001612b3191815260200190565b6040516020818303038152906040529050919050565b6000612b6e84612b58878686612bf4565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d9578161296d565b60008183126129d9578161296d565b600061296d670de0b6b3a764000083612bcc86613672565b612bd69190615b8c565b612be09190615ab0565b6138b6565b606061296a8484600085613af5565b60606000845111612c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae8565b6000612c6c84613c8b565b90506000612c7986613d77565b9050600084604051602001612c9091815260200190565b60405160208183030381529060405290506000805b84518110156135e9576000858281518110612cc257612cc2615e53565b602002602001015190508451831115612d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae8565b82600003612e165780518051602091820120604051612dab92612d8592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae8565b612f6d565b805151602011612ecc5780518051602091820120604051612e4092612d8592910190815260200190565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae8565b805184516020808701919091208251919092012014612f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae8565b612f79601060016157ae565b8160200151510361315557845183036130ed57612fb38160200151601081518110612fa657612fa6615e53565b6020026020010151613dda565b96506000875111613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae8565b6001865161305491906159d4565b82146130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae8565b50505050505061296d565b600085848151811061310157613101615e53565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312c5761312c615e53565b6020026020010151905061313f81613f3a565b955061314c6001866157ae565b945050506135d6565b60028160200151510361354e57600061316d82613f5f565b905060008160008151811061318457613184615e53565b016020015160f81c9050600061319b600283615e82565b6131a6906002615ea4565b905060006131b7848360ff16613f83565b905060006131c58a89613f83565b905060006131d38383613fb9565b905080835114613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae8565b60ff85166002148061327a575060ff85166003145b15613469578082511461330f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae8565b6133298760200151600181518110612fa657612fa6615e53565b9c5060008d51116133bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae8565b60018c516133ca91906159d4565b8814613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae8565b50505050505050505050505061296d565b60ff8516158061347c575060ff85166001145b156134bb576134a8876020015160018151811061349b5761349b615e53565b6020026020010151613f3a565b99506134b4818a6157ae565b9850613543565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae8565b5050505050506135d6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae8565b50806135e181615e1b565b915050612ca5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae8565b60008082136136dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b600060606136ea8461406d565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e757506000919050565b680755bf798b4a1bf1e58212613959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae8565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae8565b73ffffffffffffffffffffffffffffffffffffffff85163b613c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2e9190615ec7565b60006040518083038185875af1925050503d8060008114613c6b576040519150601f19603f3d011682016040523d82523d6000602084013e613c70565b606091505b5091509150613c80828286614143565b979650505050505050565b80516060908067ffffffffffffffff811115613ca957613ca9615233565b604051908082528060200260200182016040528015613cee57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc75790505b50915060005b81811015613d70576040518060400160405280858381518110613d1957613d19615e53565b60200260200101518152602001613d48868481518110613d3b57613d3b615e53565b6020026020010151614196565b815250838281518110613d5d57613d5d615e53565b6020908102919091010152600101613cf4565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dcf578060011b82018184015160001a8060041c8253600f811660018301535050600101613da1565b509295945050505050565b60606000806000613dea856141a9565b919450925090506000816001811115613e0557613e05615ee3565b14613e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae8565b613e9c82846157ae565b855114613f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae8565b612b6e85602001518484614c16565b60606020826000015110613f5657613f5182613dda565b610ffd565b610ffd82614caa565b6060610ffd613f7e8360200151600081518110612fa657612fa6615e53565b613d77565b606082518210613fa25750604080516020810190915260008152610ffd565b61296d8383848651613fb491906159d4565b614cc0565b6000808251845110613fcc578251613fcf565b83515b90505b80821080156140565750828281518110613fee57613fee615e53565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402d5761402d615e53565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406657816001019150613fd2565b5092915050565b60008082116140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415257508161296d565b8251156141625782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae891906155c5565b6060610ffd6141a483614e98565b614f81565b600080600080846000015111614267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b6020840151805160001a607f811161428c576000600160009450945094505050614c0f565b60b7811161449a5760006142a16080836159d4565b90508087600001511161435c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae8565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d557507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae8565b5060019550935060009250614c0f915050565b60bf81116147e85760006144af60b7836159d4565b90508087600001511161456a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c6037811161470c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae8565b61471681846157ae565b8951116147cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae8565b6147d68360016157ae565b9750955060009450614c0f9350505050565b60f781116148c95760006147fd60c0836159d4565b9050808760000151116148b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b600195509350849250614c0f915050565b60006148d660f7836159d4565b905080876000015111614991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c60378111614b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae8565b614b3d81846157ae565b895111614bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b614bfd8360016157ae565b9750955060019450614c0f9350505050565b9193909250565b60608167ffffffffffffffff811115614c3157614c31615233565b6040519080825280601f01601f191660200182016040528015614c5b576020820181803683370190505b509050811561296d576000614c7084866157ae565b90506020820160005b84811015614c91578281015182820152602001614c79565b84811115614ca0576000858301525b5050509392505050565b6060610ffd826020015160008460000151614c16565b60608182601f011015614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b828284011015614d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b81830184511015614e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae8565b606082158015614e275760405191506000825260208201604052614e8f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e60578051835260209283019201614e48565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f91856141a9565b919450925090506001816001811115614fac57614fac615ee3565b14615039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae8565b845161504583856157ae565b146150d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae8565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e95790505093506000835b86518110156151d75760008061515c6040518060400160405280858c6000015161514091906159d4565b8152602001858c6020015161515591906157ae565b90526141a9565b50915091506040518060400160405280838361517891906157ae565b8152602001848b6020015161518d91906157ae565b8152508885815181106151a2576151a2615e53565b60209081029190910101526151b86001856157ae565b93506151c481836157ae565b6151ce90846157ae565b92505050615116565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520557600080fd5b50565b803567ffffffffffffffff8116811461522057600080fd5b919050565b801515811461520557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a9576152a9615233565b604052919050565b600082601f8301126152c257600080fd5b813567ffffffffffffffff8111156152dc576152dc615233565b61530d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615262565b81815284602083860101111561532257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535857600080fd5b8635615363816151e3565b9550602087013594506040870135935061537f60608801615208565b9250608087013561538f81615225565b915060a087013567ffffffffffffffff8111156153ab57600080fd5b6153b789828a016152b1565b9150509295509295509295565b600060c082840312156153d657600080fd5b60405160c0810167ffffffffffffffff82821081831117156153fa576153fa615233565b816040528293508435835260208501359150615415826151e3565b8160208401526040850135915061542b826151e3565b816040840152606085013560608401526080850135608084015260a085013591508082111561545957600080fd5b50615466858286016152b1565b60a0830152505092915050565b600080600080600085870360e081121561548c57600080fd5b863567ffffffffffffffff808211156154a457600080fd5b6154b08a838b016153c4565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e957600080fd5b60408901955060c089013592508083111561550357600080fd5b828901925089601f84011261551757600080fd5b823591508082111561552857600080fd5b508860208260051b840101111561553e57600080fd5b959894975092955050506020019190565b60005b8381101561556a578181015183820152602001615552565b83811115611f025750506000910152565b6000815180845261559381602086016020860161554f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296d602083018461557b565b6000602082840312156155ea57600080fd5b5035919050565b60ff8116811461520557600080fd5b6000806000806080858703121561561657600080fd5b8435615621816151e3565b93506020850135615631816155f1565b93969395505050506040820135916060013590565b60006020828403121561565857600080fd5b813567ffffffffffffffff81111561566f57600080fd5b61567b848285016153c4565b949350505050565b60006020828403121561569557600080fd5b61296d82615208565b6000806000606084860312156156b357600080fd5b83356156be816151e3565b925060208401356156ce816151e3565b915060408401356156de816151e3565b809150509250925092565b600080600080600060a0868803121561570157600080fd5b853561570c816151e3565b94506020860135935061572160408701615208565b9250606086013561573181615225565b9150608086013567ffffffffffffffff81111561574d57600080fd5b615759888289016152b1565b9150509295509295909350565b60006020828403121561577857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157c1576157c161577f565b500190565b6000602082840312156157d857600080fd5b815161296d816151e3565b80516fffffffffffffffffffffffffffffffff8116811461522057600080fd5b60006060828403121561581557600080fd5b6040516060810181811067ffffffffffffffff8211171561583857615838615233565b6040528251815261584b602084016157e3565b602082015261585c604084016157e3565b60408201529392505050565b60006080828403121561587a57600080fd5b6040516080810181811067ffffffffffffffff8211171561589d5761589d615233565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e9576158e9615233565b8360051b60206158fa818301615262565b86815291850191818101903684111561591257600080fd5b865b848110156159465780358681111561592c5760008081fd5b61593836828b016152b1565b845250918301918301615914565b50979650505050505050565b60006020828403121561596457600080fd5b815161296d81615225565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c381604985016020870161554f565b919091016049019695505050505050565b6000828210156159e6576159e661577f565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1257615a1261577f565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3e57615a3e61577f565b01949350505050565b60008060408385031215615a5a57600080fd5b8251615a65816151e3565b6020840151909250615a76816155f1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abf57615abf615a81565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1357615b1361577f565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5257615b5261577f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8657615b8661577f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcd57615bcd61577f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0857615c0861577f565b60008712925087820587128484161615615c2457615c2461577f565b87850587128184161615615c3a57615c3a61577f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8257615c8261577f565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb657615cb661577f565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf457615cf461577f565b500290565b600082615d0857615d08615a81565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5860c083018461557b565b98975050505050505050565b805163ffffffff8116811461522057600080fd5b600060c08284031215615d8a57600080fd5b60405160c0810181811067ffffffffffffffff82111715615dad57615dad615233565b604052615db983615d64565b81526020830151615dc9816155f1565b60208201526040830151615ddc816155f1565b6040820152615ded60608401615d64565b6060820152615dfe60808401615d64565b6080820152615e0f60a084016157e3565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4c57615e4c61577f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9557615e95615a81565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebe57615ebe61577f565b90039392505050565b60008251615ed981846020870161554f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; bytes internal constant l1CrossDomainMessengerCode = - hex"60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280601b81526020017f322e342e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a"; + hex"60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant l2OutputOracleCode = hex"60806040526004361061018a5760003560e01c806389c44cbb116100d6578063ce5db8d61161007f578063dcec334811610059578063dcec33481461049b578063e1a41bcf146104b0578063f4daa291146104c657600080fd5b8063ce5db8d614610445578063cf8e5cf01461045b578063d1de856c1461047b57600080fd5b8063a25ae557116100b0578063a25ae55714610391578063a8e4fb90146103ed578063bffa7f0f1461041a57600080fd5b806389c44cbb1461034857806393991af3146103685780639aaab6481461037e57600080fd5b806369f16eec1161013857806370872aa51161011257806370872aa5146102fc5780637f00642014610312578063887862721461033257600080fd5b806369f16eec146102a75780636abcf563146102bc5780636b4d98dd146102d157600080fd5b8063529933df11610169578063529933df146101ea578063534db0e2146101ff57806354fd4d501461025157600080fd5b80622134cc1461018f5780631c89c97d146101b35780634599c788146101d5575b600080fd5b34801561019b57600080fd5b506005545b6040519081526020015b60405180910390f35b3480156101bf57600080fd5b506101d36101ce3660046113a2565b6104db565b005b3480156101e157600080fd5b506101a06108b6565b3480156101f657600080fd5b506004546101a0565b34801561020b57600080fd5b5060065461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101aa565b34801561025d57600080fd5b5061029a6040518060400160405280600581526020017f312e382e3000000000000000000000000000000000000000000000000000000081525081565b6040516101aa9190611405565b3480156102b357600080fd5b506101a0610929565b3480156102c857600080fd5b506003546101a0565b3480156102dd57600080fd5b5060065473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561030857600080fd5b506101a060015481565b34801561031e57600080fd5b506101a061032d366004611478565b61093b565b34801561033e57600080fd5b506101a060025481565b34801561035457600080fd5b506101d3610363366004611478565b610b4f565b34801561037457600080fd5b506101a060055481565b6101d361038c366004611491565b610de9565b34801561039d57600080fd5b506103b16103ac366004611478565b61124a565b60408051825181526020808401516fffffffffffffffffffffffffffffffff9081169183019190915292820151909216908201526060016101aa565b3480156103f957600080fd5b5060075461022c9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561042657600080fd5b5060075473ffffffffffffffffffffffffffffffffffffffff1661022c565b34801561045157600080fd5b506101a060085481565b34801561046757600080fd5b506103b1610476366004611478565b6112de565b34801561048757600080fd5b506101a0610496366004611478565b611316565b3480156104a757600080fd5b506101a0611346565b3480156104bc57600080fd5b506101a060045481565b3480156104d257600080fd5b506008546101a0565b600054610100900460ff16158080156104fb5750600054600160ff909116105b806105155750303b158015610515575060005460ff166001145b6105a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561060457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b60008811610694576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a207375626d697373696f6e20696e74657260448201527f76616c206d7573742062652067726561746572207468616e2030000000000000606482015260840161059d565b60008711610724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f4c324f75747075744f7261636c653a204c3220626c6f636b2074696d65206d7560448201527f73742062652067726561746572207468616e2030000000000000000000000000606482015260840161059d565b428511156107db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60048890556005879055600186905560028590556007805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff0000000000000000000000000000000000000000928316179092556006805492861692909116919091179055600882905580156108ac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050505050565b6003546000901561092057600380546108d1906001906114f2565b815481106108e1576108e1611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff16919050565b6001545b905090565b600354600090610924906001906114f2565b60006109456108b6565b8211156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f7420666f72206120626c6f636b207468617420686173206e6f74206265656e2060648201527f70726f706f736564000000000000000000000000000000000000000000000000608482015260a40161059d565b600354610aaf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f7420676574206f7574707560448201527f74206173206e6f206f7574707574732068617665206265656e2070726f706f7360648201527f6564207965740000000000000000000000000000000000000000000000000000608482015260a40161059d565b6003546000905b80821015610b485760006002610acc8385611538565b610ad69190611550565b90508460038281548110610aec57610aec611509565b600091825260209091206002909102016001015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff161015610b3e57610b37816001611538565b9250610b42565b8091505b50610ab6565b5092915050565b60065473ffffffffffffffffffffffffffffffffffffffff163314610bf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f7574707574730000606482015260840161059d565b6003548110610cad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c6174657374206f757470757420696e60648201527f6465780000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b60085460038281548110610cc357610cc3611509565b6000918252602090912060016002909202010154610cf3906fffffffffffffffffffffffffffffffff16426114f2565b10610da6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f74707574732074686174206861766520616c7265616479206265656e2066696e60648201527f616c697a65640000000000000000000000000000000000000000000000000000608482015260a40161059d565b6000610db160035490565b90508160035581817f4ee37ac2c786ec85e87592d3c5c8a1dd66f8496dda3f125d9ea8ca5f657629b660405160405180910390a35050565b60075473ffffffffffffffffffffffffffffffffffffffff163314610eb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a40161059d565b610ebe611346565b8314610f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a40161059d565b42610f7c84611316565b10611009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e207468652066757475726500000000000000000000606482015260840161059d565b83611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f2068617368000000000000606482015260840161059d565b81156111525781814014611152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4c324f75747075744f7261636c653a20626c6f636b206861736820646f65732060448201527f6e6f74206d61746368207468652068617368206174207468652065787065637460648201527f6564206865696768740000000000000000000000000000000000000000000000608482015260a40161059d565b8261115c60035490565b857fa7aaf2512769da4e444e3de247be2564225c2e7a8f74cfe528e46e17d24868e24260405161118e91815260200190565b60405180910390a45050604080516060810182529283526fffffffffffffffffffffffffffffffff4281166020850190815292811691840191825260038054600181018255600091909152935160029094027fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b810194909455915190518216700100000000000000000000000000000000029116177fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85c90910155565b60408051606081018252600080825260208201819052918101919091526003828154811061127a5761127a611509565b600091825260209182902060408051606081018252600290930290910180548352600101546fffffffffffffffffffffffffffffffff8082169484019490945270010000000000000000000000000000000090049092169181019190915292915050565b604080516060810182526000808252602082018190529181019190915260036113068361093b565b8154811061127a5761127a611509565b60006005546001548361132991906114f2565b611333919061158b565b6002546113409190611538565b92915050565b60006004546113536108b6565b6109249190611538565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b803573ffffffffffffffffffffffffffffffffffffffff8116811461139d57600080fd5b919050565b600080600080600080600060e0888a0312156113bd57600080fd5b873596506020880135955060408801359450606088013593506113e260808901611379565b92506113f060a08901611379565b915060c0880135905092959891949750929550565b600060208083528351808285015260005b8181101561143257858101830151858201604001528201611416565b81811115611444576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60006020828403121561148a57600080fd5b5035919050565b600080600080608085870312156114a757600080fd5b5050823594602084013594506040840135936060013592509050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015611504576115046114c3565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561154b5761154b6114c3565b500190565b600082611586577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156115c3576115c36114c3565b50029056fea164736f6c634300080f000a"; bytes internal constant systemConfigCode = - hex"608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280601b81526020017f322e312e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a"; + hex"608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a"; bytes internal constant l1StandardBridgeCode = - hex"6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280601b81526020017f322e322e302d626574612b637573746f6d2d6761732d746f6b656e000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a"; + hex"6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a"; bytes internal constant l1ERC721BridgeCode = hex"608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a"; } From aefb52269aa08141aa407b0e1d6f00b16677fd6f Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 30 Apr 2024 19:49:06 -0600 Subject: [PATCH 28/45] contracts-bedrock: test case --- .../src/L1/OptimismPortal.sol | 6 ++--- .../test/L1/OptimismPortal.t.sol | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/packages/contracts-bedrock/src/L1/OptimismPortal.sol b/packages/contracts-bedrock/src/L1/OptimismPortal.sol index 1d7864fdb21..072b81d4237 100644 --- a/packages/contracts-bedrock/src/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/src/L1/OptimismPortal.sol @@ -446,6 +446,9 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { (address token,) = gasPayingToken(); if (token == Constants.ETHER) revert OnlyCustomGasToken(); + // Gives overflow protection for L2 account balances. + _balance += _mint; + // Get the balance of the portal before the transfer. uint256 startBalance = IERC20(token).balanceOf(address(this)); @@ -457,9 +460,6 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { revert TransferFailed(); } - // Gives overflow protection for L2 account balances. - _balance += _mint; - _depositTransaction({ _to: _to, _mint: _mint, diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index 889156a7434..b9bb8995711 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -487,6 +487,28 @@ contract OptimismPortal_Test is CommonTest { optimismPortal.depositERC20Transaction(address(0), 0, 0, 0, false, ""); } + function test_depositERC20Transaction_balanceOverflow_reverts() external { + vm.mockCall( + address(systemConfig), + abi.encodeWithSignature("gasPayingToken()"), + abi.encode(address(42), 18) + ); + + // The balance slot + vm.store(address(optimismPortal), bytes32(uint256(61)), bytes32(type(uint256).max)); + assertEq(optimismPortal.balance(), type(uint256).max); + + vm.expectRevert(stdError.arithmeticError); + optimismPortal.depositERC20Transaction({ + _to: address(0), + _mint: 1, + _value: 1, + _gasLimit: 10_000, + _isCreation: false, + _data: "" + }); + } + /// @dev Tests that `balance()` returns the correct balance when the gas paying token is ether. function testFuzz_balance_ether_succeeds(uint256 _amount) external { // Check that the gas paying token is set to ether From 8f5292fcfc31bc5282ff4c10114e3672ceab4cd4 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 30 Apr 2024 19:55:06 -0600 Subject: [PATCH 29/45] custom-gas-token: cleanup, tests --- packages/contracts-bedrock/semver-lock.json | 4 +- .../snapshots/state-diff/Kontrol-Deploy.json | 118 +++++++++--------- .../src/L1/OptimismPortal.sol | 1 + .../proofs/utils/DeploymentSummary.sol | 4 +- .../proofs/utils/DeploymentSummaryCode.sol | 2 +- 5 files changed, 65 insertions(+), 64 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 67bf5248aeb..ea0ed205ee0 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -32,8 +32,8 @@ "sourceCodeHash": "0xf5fcf570721e25459fadbb37e02f9efe349e1c8afcbf1e3b5fdb09c9f612cdc0" }, "src/L1/OptimismPortal.sol": { - "initCodeHash": "0xd17e50769a1cb38e435c5a52d660da941c4d45a5bfd777acb263aed2557e9d2f", - "sourceCodeHash": "0xbf373db66aea67f8091f162e9995f96abcc8c5220de65736efa269a1710d0025" + "initCodeHash": "0x25333335a13efe9262c1e4cc62ba559decc730027979a515dfc848a03193162f", + "sourceCodeHash": "0x3802c523568f23c5d6574840c74cdee7bc0a487b76056b6f3d1455e3fec1a173" }, "src/L1/OptimismPortal2.sol": { "initCodeHash": "0xea32d79e8297956d4f9a4c7985bb53ff8bb3735e5b307d4e118fea71f503a38e", diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json index 8ee03f9eedf..247f91a1d86 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json @@ -3314,7 +3314,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001f081760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f1f806200029f6000396000f3fe6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533f565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc610870565b34801561025957600080fd5b50610188610268366004615473565b610908565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c5565b3480156102cf57600080fd5b506102d8610eb5565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d8565b610f48565b34801561031457600080fd5b50610188610323366004615600565b611003565b34801561033457600080fd5b50610188610343366004615646565b6111c5565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d8565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615683565b611c47565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c60565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569e565b611cba565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d8565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e9565b8260005a90506000610599611f24565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc1565b50610625828261216d565b50505050505050565b8260005a9050600061063e611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190615766565b905061076573ffffffffffffffffffffffffffffffffffffffff831633308c61243a565b61076f89826157ae565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190615766565b14610834576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461084691906157ae565b9091555061085a90508a8a8a8a8a8a611fc1565b5050610866828261216d565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090391906157c6565b905090565b610910610eb5565b15610947576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109b0576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190615803565b519050610a5e610a5936869003860186615868565b612516565b8114610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afc87612572565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c125750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e9190615803565b5114155b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae8565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d679101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5d888a6158ce565b8a604001356125a2565b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae8565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615952565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffd9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe29190615803565b602001516fffffffffffffffffffffffffffffffff166125c6565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611054576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110606201388061266c565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117d9695949392910161596f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b5916155c5565b60405180910390a450505050565b565b6111cd610eb5565b15611204576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611257576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126282612572565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae8565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190615766565b81602001516fffffffffffffffffffffffffffffffff1610156114a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae8565b6114c881602001516fffffffffffffffffffffffffffffffff166125c6565b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190615803565b82518151919250146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae8565b6116fe81602001516fffffffffffffffffffffffffffffffff166125c6565b6117b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60008381526033602052604090205460ff161561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae8565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118da611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193d576119368660400151876080015188606001518960a001516126c8565b9150611b90565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b67578560600151603d60008282546119c691906159d4565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190615766565b9050611a91876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127269092919063ffffffff16565b6060870151611aa090826159d4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190615766565b14611b65576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8b576119368660400151876080015160008960a001516126c8565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf290851515815260200190565b60405180910390a281158015611c085750326001145b15611c3f576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c548260106159eb565b610ffd90615208615a1b565b600080611c6b611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb2574791505090565b5050603d5490565b600054610100900460ff1615808015611cda5750600054600160ff909116105b80611cf45750303b158015611cf4575060005460ff166001145b611d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611dde57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9757603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9f612781565b8015611f0257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190615a47565b90939092509050565b818015611fe3575073ffffffffffffffffffffffffffffffffffffffff861615155b1561201a576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120248151611c47565b67ffffffffffffffff168367ffffffffffffffff161015612071576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120af576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120d0575033731111000000000000000000000000000000001111015b600086868686866040516020016120eb95949392919061596f565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215b91906155c5565b60405180910390a45050505050505050565b6001546000906121a3907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d4565b905060006121af612894565b90506000816020015160ff16826000015163ffffffff166121d09190615ab0565b9050821561230757600154600090612207908390700100000000000000000000000000000000900467ffffffffffffffff16615b18565b90506000836040015160ff168361221e9190615b8c565b60015461223e9084906fffffffffffffffffffffffffffffffff16615b8c565b6122489190615ab0565b600154909150600090612299906122729084906fffffffffffffffffffffffffffffffff16615c48565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612955565b905060018611156122c8576122c561227282876040015160ff1660018a6122c091906159d4565b612974565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061233a908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c7576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f3906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbc565b9050600061240548633b9aca006129c9565b61240f9083615cf9565b905060005a61241e90886159d4565b9050808211156108665761086661243582846159d4565b6129e0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f029085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a09565b60008160000151826020015183604001518460600151604051602001612555949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612555979096959101615d0d565b6000806125ae86612b15565b90506125bc81868686612b47565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265a9190615766565b61266490836157ae565b421192915050565b6001805482919060109061269f908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d8866000612b77565b90508061270e576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277c9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612494565b505050565b600054610100900460ff16612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae8565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c35760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615d78565b600061296a6129648585612b95565b83612ba5565b90505b9392505050565b6000670de0b6b3a76400006129b561298c8583615ab0565b61299e90670de0b6b3a7640000615b18565b6129b085670de0b6b3a7640000615b8c565b612bb4565b6129bf9086615b8c565b61296a9190615ab0565b6000818310156129d9578161296d565b5090919050565b6000805a90505b825a6129f390836159d4565b101561277c57612a0282615e1b565b91506129e7565b6000612a6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be59092919063ffffffff16565b80519091501561277c5780806020019051810190612a899190615952565b61277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae8565b60608180519060200120604051602001612b3191815260200190565b6040516020818303038152906040529050919050565b6000612b6e84612b58878686612bf4565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d9578161296d565b60008183126129d9578161296d565b600061296d670de0b6b3a764000083612bcc86613672565b612bd69190615b8c565b612be09190615ab0565b6138b6565b606061296a8484600085613af5565b60606000845111612c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae8565b6000612c6c84613c8b565b90506000612c7986613d77565b9050600084604051602001612c9091815260200190565b60405160208183030381529060405290506000805b84518110156135e9576000858281518110612cc257612cc2615e53565b602002602001015190508451831115612d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae8565b82600003612e165780518051602091820120604051612dab92612d8592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae8565b612f6d565b805151602011612ecc5780518051602091820120604051612e4092612d8592910190815260200190565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae8565b805184516020808701919091208251919092012014612f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae8565b612f79601060016157ae565b8160200151510361315557845183036130ed57612fb38160200151601081518110612fa657612fa6615e53565b6020026020010151613dda565b96506000875111613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae8565b6001865161305491906159d4565b82146130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae8565b50505050505061296d565b600085848151811061310157613101615e53565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312c5761312c615e53565b6020026020010151905061313f81613f3a565b955061314c6001866157ae565b945050506135d6565b60028160200151510361354e57600061316d82613f5f565b905060008160008151811061318457613184615e53565b016020015160f81c9050600061319b600283615e82565b6131a6906002615ea4565b905060006131b7848360ff16613f83565b905060006131c58a89613f83565b905060006131d38383613fb9565b905080835114613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae8565b60ff85166002148061327a575060ff85166003145b15613469578082511461330f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae8565b6133298760200151600181518110612fa657612fa6615e53565b9c5060008d51116133bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae8565b60018c516133ca91906159d4565b8814613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae8565b50505050505050505050505061296d565b60ff8516158061347c575060ff85166001145b156134bb576134a8876020015160018151811061349b5761349b615e53565b6020026020010151613f3a565b99506134b4818a6157ae565b9850613543565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae8565b5050505050506135d6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae8565b50806135e181615e1b565b915050612ca5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae8565b60008082136136dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b600060606136ea8461406d565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e757506000919050565b680755bf798b4a1bf1e58212613959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae8565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae8565b73ffffffffffffffffffffffffffffffffffffffff85163b613c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2e9190615ec7565b60006040518083038185875af1925050503d8060008114613c6b576040519150601f19603f3d011682016040523d82523d6000602084013e613c70565b606091505b5091509150613c80828286614143565b979650505050505050565b80516060908067ffffffffffffffff811115613ca957613ca9615233565b604051908082528060200260200182016040528015613cee57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc75790505b50915060005b81811015613d70576040518060400160405280858381518110613d1957613d19615e53565b60200260200101518152602001613d48868481518110613d3b57613d3b615e53565b6020026020010151614196565b815250838281518110613d5d57613d5d615e53565b6020908102919091010152600101613cf4565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dcf578060011b82018184015160001a8060041c8253600f811660018301535050600101613da1565b509295945050505050565b60606000806000613dea856141a9565b919450925090506000816001811115613e0557613e05615ee3565b14613e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae8565b613e9c82846157ae565b855114613f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae8565b612b6e85602001518484614c16565b60606020826000015110613f5657613f5182613dda565b610ffd565b610ffd82614caa565b6060610ffd613f7e8360200151600081518110612fa657612fa6615e53565b613d77565b606082518210613fa25750604080516020810190915260008152610ffd565b61296d8383848651613fb491906159d4565b614cc0565b6000808251845110613fcc578251613fcf565b83515b90505b80821080156140565750828281518110613fee57613fee615e53565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402d5761402d615e53565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406657816001019150613fd2565b5092915050565b60008082116140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415257508161296d565b8251156141625782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae891906155c5565b6060610ffd6141a483614e98565b614f81565b600080600080846000015111614267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b6020840151805160001a607f811161428c576000600160009450945094505050614c0f565b60b7811161449a5760006142a16080836159d4565b90508087600001511161435c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae8565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d557507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae8565b5060019550935060009250614c0f915050565b60bf81116147e85760006144af60b7836159d4565b90508087600001511161456a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c6037811161470c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae8565b61471681846157ae565b8951116147cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae8565b6147d68360016157ae565b9750955060009450614c0f9350505050565b60f781116148c95760006147fd60c0836159d4565b9050808760000151116148b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b600195509350849250614c0f915050565b60006148d660f7836159d4565b905080876000015111614991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c60378111614b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae8565b614b3d81846157ae565b895111614bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b614bfd8360016157ae565b9750955060019450614c0f9350505050565b9193909250565b60608167ffffffffffffffff811115614c3157614c31615233565b6040519080825280601f01601f191660200182016040528015614c5b576020820181803683370190505b509050811561296d576000614c7084866157ae565b90506020820160005b84811015614c91578281015182820152602001614c79565b84811115614ca0576000858301525b5050509392505050565b6060610ffd826020015160008460000151614c16565b60608182601f011015614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b828284011015614d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b81830184511015614e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae8565b606082158015614e275760405191506000825260208201604052614e8f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e60578051835260209283019201614e48565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f91856141a9565b919450925090506001816001811115614fac57614fac615ee3565b14615039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae8565b845161504583856157ae565b146150d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae8565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e95790505093506000835b86518110156151d75760008061515c6040518060400160405280858c6000015161514091906159d4565b8152602001858c6020015161515591906157ae565b90526141a9565b50915091506040518060400160405280838361517891906157ae565b8152602001848b6020015161518d91906157ae565b8152508885815181106151a2576151a2615e53565b60209081029190910101526151b86001856157ae565b93506151c481836157ae565b6151ce90846157ae565b92505050615116565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520557600080fd5b50565b803567ffffffffffffffff8116811461522057600080fd5b919050565b801515811461520557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a9576152a9615233565b604052919050565b600082601f8301126152c257600080fd5b813567ffffffffffffffff8111156152dc576152dc615233565b61530d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615262565b81815284602083860101111561532257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535857600080fd5b8635615363816151e3565b9550602087013594506040870135935061537f60608801615208565b9250608087013561538f81615225565b915060a087013567ffffffffffffffff8111156153ab57600080fd5b6153b789828a016152b1565b9150509295509295509295565b600060c082840312156153d657600080fd5b60405160c0810167ffffffffffffffff82821081831117156153fa576153fa615233565b816040528293508435835260208501359150615415826151e3565b8160208401526040850135915061542b826151e3565b816040840152606085013560608401526080850135608084015260a085013591508082111561545957600080fd5b50615466858286016152b1565b60a0830152505092915050565b600080600080600085870360e081121561548c57600080fd5b863567ffffffffffffffff808211156154a457600080fd5b6154b08a838b016153c4565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e957600080fd5b60408901955060c089013592508083111561550357600080fd5b828901925089601f84011261551757600080fd5b823591508082111561552857600080fd5b508860208260051b840101111561553e57600080fd5b959894975092955050506020019190565b60005b8381101561556a578181015183820152602001615552565b83811115611f025750506000910152565b6000815180845261559381602086016020860161554f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296d602083018461557b565b6000602082840312156155ea57600080fd5b5035919050565b60ff8116811461520557600080fd5b6000806000806080858703121561561657600080fd5b8435615621816151e3565b93506020850135615631816155f1565b93969395505050506040820135916060013590565b60006020828403121561565857600080fd5b813567ffffffffffffffff81111561566f57600080fd5b61567b848285016153c4565b949350505050565b60006020828403121561569557600080fd5b61296d82615208565b6000806000606084860312156156b357600080fd5b83356156be816151e3565b925060208401356156ce816151e3565b915060408401356156de816151e3565b809150509250925092565b600080600080600060a0868803121561570157600080fd5b853561570c816151e3565b94506020860135935061572160408701615208565b9250606086013561573181615225565b9150608086013567ffffffffffffffff81111561574d57600080fd5b615759888289016152b1565b9150509295509295909350565b60006020828403121561577857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157c1576157c161577f565b500190565b6000602082840312156157d857600080fd5b815161296d816151e3565b80516fffffffffffffffffffffffffffffffff8116811461522057600080fd5b60006060828403121561581557600080fd5b6040516060810181811067ffffffffffffffff8211171561583857615838615233565b6040528251815261584b602084016157e3565b602082015261585c604084016157e3565b60408201529392505050565b60006080828403121561587a57600080fd5b6040516080810181811067ffffffffffffffff8211171561589d5761589d615233565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e9576158e9615233565b8360051b60206158fa818301615262565b86815291850191818101903684111561591257600080fd5b865b848110156159465780358681111561592c5760008081fd5b61593836828b016152b1565b845250918301918301615914565b50979650505050505050565b60006020828403121561596457600080fd5b815161296d81615225565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c381604985016020870161554f565b919091016049019695505050505050565b6000828210156159e6576159e661577f565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1257615a1261577f565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3e57615a3e61577f565b01949350505050565b60008060408385031215615a5a57600080fd5b8251615a65816151e3565b6020840151909250615a76816155f1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abf57615abf615a81565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1357615b1361577f565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5257615b5261577f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8657615b8661577f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcd57615bcd61577f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0857615c0861577f565b60008712925087820587128484161615615c2457615c2461577f565b87850587128184161615615c3a57615c3a61577f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8257615c8261577f565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb657615cb661577f565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf457615cf461577f565b500290565b600082615d0857615d08615a81565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5860c083018461557b565b98975050505050505050565b805163ffffffff8116811461522057600080fd5b600060c08284031215615d8a57600080fd5b60405160c0810181811067ffffffffffffffff82111715615dad57615dad615233565b604052615db983615d64565b81526020830151615dc9816155f1565b60208201526040830151615ddc816155f1565b6040820152615ded60608401615d64565b6060820152615dfe60808401615d64565b6080820152615e0f60a084016157e3565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4c57615e4c61577f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9557615e95615a81565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebe57615ebe61577f565b90039392505050565b60008251615ed981846020870161554f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001f071760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f1e806200029f6000396000f3fe6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533e565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615472565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c4565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d7565b610f47565b34801561031457600080fd5b506101886103233660046155ff565b611002565b34801561033457600080fd5b50610188610343366004615645565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d7565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615682565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569d565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d7565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e8565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c29190615794565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157ac565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b6107868982615794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157ac565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157c5565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615802565b519050610a5d610a5836869003860186615867565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615802565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158cd565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615951565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615802565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c9695949392910161596e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155c4565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157ac565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615802565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126c7565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d3565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157ac565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127259092919063ffffffff16565b6060870151611a9f90826159d3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157ac565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126c7565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159ea565b610ffc90615208615a1a565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612780565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a46565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea95949392919061596e565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155c4565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d3565b905060006121ae612893565b90506000816020015160ff16826000015163ffffffff166121cf9190615aaf565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b17565b90506000836040015160ff168361221d9190615b8b565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b8b565b6122479190615aaf565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c47565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612954565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d3565b612973565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbb565b9050600061240448633b9aca006129c8565b61240e9083615cf8565b905060005a61241d90886159d3565b9050808211156108655761086561243482846159d3565b6129df565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a08565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d0c565b6000806125ad86612b14565b90506125bb81868686612b46565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157ac565b6126639083615794565b421192915050565b6001805482919060109061269e908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d7866000612b76565b90508061270d576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff16612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d77565b60006129696129638585612b94565b83612ba4565b90505b9392505050565b6000670de0b6b3a76400006129b461298b8583615aaf565b61299d90670de0b6b3a7640000615b17565b6129af85670de0b6b3a7640000615b8b565b612bb3565b6129be9086615b8b565b6129699190615aaf565b6000818310156129d8578161296c565b5090919050565b6000805a90505b825a6129f290836159d3565b101561277b57612a0182615e1a565b91506129e6565b6000612a6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be49092919063ffffffff16565b80519091501561277b5780806020019051810190612a889190615951565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3091815260200190565b6040516020818303038152906040529050919050565b6000612b6d84612b57878686612bf3565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d8578161296c565b60008183126129d8578161296c565b600061296c670de0b6b3a764000083612bcb86613671565b612bd59190615b8b565b612bdf9190615aaf565b6138b5565b60606129698484600085613af4565b60606000845111612c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c6b84613c8a565b90506000612c7886613d76565b9050600084604051602001612c8f91815260200190565b60405160208183030381529060405290506000805b84518110156135e8576000858281518110612cc157612cc1615e52565b602002602001015190508451831115612d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e155780518051602091820120604051612daa92612d8492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f6c565b805151602011612ecb5780518051602091820120604051612e3f92612d8492910190815260200190565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7860106001615794565b8160200151510361315457845183036130ec57612fb28160200151601081518110612fa557612fa5615e52565b6020026020010151613dd9565b96506000875111613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305391906159d3565b82146130e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b50505050505061296c565b600085848151811061310057613100615e52565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312b5761312b615e52565b6020026020010151905061313e81613f39565b955061314b600186615794565b945050506135d5565b60028160200151510361354d57600061316c82613f5e565b905060008160008151811061318357613183615e52565b016020015160f81c9050600061319a600283615e81565b6131a5906002615ea3565b905060006131b6848360ff16613f82565b905060006131c48a89613f82565b905060006131d28383613fb8565b905080835114613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff851660021480613279575060ff85166003145b15613468578082511461330e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b6133288760200151600181518110612fa557612fa5615e52565b9c5060008d51116133bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133c991906159d3565b8814613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b50505050505050505050505061296c565b60ff8516158061347b575060ff85166001145b156134ba576134a7876020015160018151811061349a5761349a615e52565b6020026020010151613f39565b99506134b3818a615794565b9850613542565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135d5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e081615e1a565b915050612ca4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136e98461406c565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e657506000919050565b680755bf798b4a1bf1e58212613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2d9190615ec6565b60006040518083038185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b5091509150613c7f828286614142565b979650505050505050565b80516060908067ffffffffffffffff811115613ca857613ca8615232565b604051908082528060200260200182016040528015613ced57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc65790505b50915060005b81811015613d6f576040518060400160405280858381518110613d1857613d18615e52565b60200260200101518152602001613d47868481518110613d3a57613d3a615e52565b6020026020010151614195565b815250838281518110613d5c57613d5c615e52565b6020908102919091010152600101613cf3565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dce578060011b82018184015160001a8060041c8253600f811660018301535050600101613da0565b509295945050505050565b60606000806000613de9856141a8565b919450925090506000816001811115613e0457613e04615ee2565b14613e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613e9b8284615794565b855114613f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b6d85602001518484614c15565b60606020826000015110613f5557613f5082613dd9565b610ffc565b610ffc82614ca9565b6060610ffc613f7d8360200151600081518110612fa557612fa5615e52565b613d76565b606082518210613fa15750604080516020810190915260008152610ffc565b61296c8383848651613fb391906159d3565b614cbf565b6000808251845110613fcb578251613fce565b83515b90505b80821080156140555750828281518110613fed57613fed615e52565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402c5761402c615e52565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406557816001019150613fd1565b5092915050565b60008082116140d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415157508161296c565b8251156141615782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155c4565b6060610ffc6141a383614e97565b614f80565b600080600080846000015111614266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f811161428b576000600160009450945094505050614c0e565b60b781116144995760006142a06080836159d3565b90508087600001511161435b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d457507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c0e915050565b60bf81116147e75760006144ae60b7836159d3565b905080876000015111614569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c6037811161470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b6147158184615794565b8951116147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147d5836001615794565b9750955060009450614c0e9350505050565b60f781116148c85760006147fc60c0836159d3565b9050808760000151116148b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c0e915050565b60006148d560f7836159d3565b905080876000015111614990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b3c8184615794565b895111614bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614bfc836001615794565b9750955060019450614c0e9350505050565b9193909250565b60608167ffffffffffffffff811115614c3057614c30615232565b6040519080825280601f01601f191660200182016040528015614c5a576020820181803683370190505b509050811561296c576000614c6f8486615794565b90506020820160005b84811015614c90578281015182820152602001614c78565b84811115614c9f576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c15565b60608182601f011015614d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e265760405191506000825260208201604052614e8e565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e5f578051835260209283019201614e47565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f90856141a8565b919450925090506001816001811115614fab57614fab615ee2565b14615038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b84516150448385615794565b146150d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e85790505093506000835b86518110156151d65760008061515b6040518060400160405280858c6000015161513f91906159d3565b8152602001858c602001516151549190615794565b90526141a8565b5091509150604051806040016040528083836151779190615794565b8152602001848b6020015161518c9190615794565b8152508885815181106151a1576151a1615e52565b60209081029190910101526151b7600185615794565b93506151c38183615794565b6151cd9084615794565b92505050615115565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520457600080fd5b50565b803567ffffffffffffffff8116811461521f57600080fd5b919050565b801515811461520457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a8576152a8615232565b604052919050565b600082601f8301126152c157600080fd5b813567ffffffffffffffff8111156152db576152db615232565b61530c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615261565b81815284602083860101111561532157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535757600080fd5b8635615362816151e2565b9550602087013594506040870135935061537e60608801615207565b9250608087013561538e81615224565b915060a087013567ffffffffffffffff8111156153aa57600080fd5b6153b689828a016152b0565b9150509295509295509295565b600060c082840312156153d557600080fd5b60405160c0810167ffffffffffffffff82821081831117156153f9576153f9615232565b816040528293508435835260208501359150615414826151e2565b8160208401526040850135915061542a826151e2565b816040840152606085013560608401526080850135608084015260a085013591508082111561545857600080fd5b50615465858286016152b0565b60a0830152505092915050565b600080600080600085870360e081121561548b57600080fd5b863567ffffffffffffffff808211156154a357600080fd5b6154af8a838b016153c3565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e857600080fd5b60408901955060c089013592508083111561550257600080fd5b828901925089601f84011261551657600080fd5b823591508082111561552757600080fd5b508860208260051b840101111561553d57600080fd5b959894975092955050506020019190565b60005b83811015615569578181015183820152602001615551565b83811115611f015750506000910152565b6000815180845261559281602086016020860161554e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296c602083018461557a565b6000602082840312156155e957600080fd5b5035919050565b60ff8116811461520457600080fd5b6000806000806080858703121561561557600080fd5b8435615620816151e2565b93506020850135615630816155f0565b93969395505050506040820135916060013590565b60006020828403121561565757600080fd5b813567ffffffffffffffff81111561566e57600080fd5b61567a848285016153c3565b949350505050565b60006020828403121561569457600080fd5b61296c82615207565b6000806000606084860312156156b257600080fd5b83356156bd816151e2565b925060208401356156cd816151e2565b915060408401356156dd816151e2565b809150509250925092565b600080600080600060a0868803121561570057600080fd5b853561570b816151e2565b94506020860135935061572060408701615207565b9250606086013561573081615224565b9150608086013567ffffffffffffffff81111561574c57600080fd5b615758888289016152b0565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157a7576157a7615765565b500190565b6000602082840312156157be57600080fd5b5051919050565b6000602082840312156157d757600080fd5b815161296c816151e2565b80516fffffffffffffffffffffffffffffffff8116811461521f57600080fd5b60006060828403121561581457600080fd5b6040516060810181811067ffffffffffffffff8211171561583757615837615232565b6040528251815261584a602084016157e2565b602082015261585b604084016157e2565b60408201529392505050565b60006080828403121561587957600080fd5b6040516080810181811067ffffffffffffffff8211171561589c5761589c615232565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e8576158e8615232565b8360051b60206158f9818301615261565b86815291850191818101903684111561591157600080fd5b865b848110156159455780358681111561592b5760008081fd5b61593736828b016152b0565b845250918301918301615913565b50979650505050505050565b60006020828403121561596357600080fd5b815161296c81615224565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c281604985016020870161554e565b919091016049019695505050505050565b6000828210156159e5576159e5615765565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1157615a11615765565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3d57615a3d615765565b01949350505050565b60008060408385031215615a5957600080fd5b8251615a64816151e2565b6020840151909250615a75816155f0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abe57615abe615a80565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1257615b12615765565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5157615b51615765565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8557615b85615765565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcc57615bcc615765565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0757615c07615765565b60008712925087820587128484161615615c2357615c23615765565b87850587128184161615615c3957615c39615765565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8157615c81615765565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb557615cb5615765565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf357615cf3615765565b500290565b600082615d0757615d07615a80565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5760c083018461557a565b98975050505050505050565b805163ffffffff8116811461521f57600080fd5b600060c08284031215615d8957600080fd5b60405160c0810181811067ffffffffffffffff82111715615dac57615dac615232565b604052615db883615d63565b81526020830151615dc8816155f0565b60208201526040830151615ddb816155f0565b6040820152615dec60608401615d63565b6060820152615dfd60808401615d63565b6080820152615e0e60a084016157e2565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4b57615e4b615765565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9457615e94615a80565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebd57615ebd615765565b90039392505050565b60008251615ed881846020870161554e565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3326,13 +3326,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001f081760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f1f806200029f6000396000f3fe6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533f565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc610870565b34801561025957600080fd5b50610188610268366004615473565b610908565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c5565b3480156102cf57600080fd5b506102d8610eb5565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d8565b610f48565b34801561031457600080fd5b50610188610323366004615600565b611003565b34801561033457600080fd5b50610188610343366004615646565b6111c5565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d8565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615683565b611c47565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c60565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569e565b611cba565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d8565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e9565b8260005a90506000610599611f24565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc1565b50610625828261216d565b50505050505050565b8260005a9050600061063e611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190615766565b905061076573ffffffffffffffffffffffffffffffffffffffff831633308c61243a565b61076f89826157ae565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190615766565b14610834576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461084691906157ae565b9091555061085a90508a8a8a8a8a8a611fc1565b5050610866828261216d565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090391906157c6565b905090565b610910610eb5565b15610947576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109b0576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190615803565b519050610a5e610a5936869003860186615868565b612516565b8114610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afc87612572565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c125750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e9190615803565b5114155b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae8565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d679101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5d888a6158ce565b8a604001356125a2565b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae8565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615952565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffd9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe29190615803565b602001516fffffffffffffffffffffffffffffffff166125c6565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611054576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110606201388061266c565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117d9695949392910161596f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b5916155c5565b60405180910390a450505050565b565b6111cd610eb5565b15611204576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611257576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126282612572565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae8565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190615766565b81602001516fffffffffffffffffffffffffffffffff1610156114a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae8565b6114c881602001516fffffffffffffffffffffffffffffffff166125c6565b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190615803565b82518151919250146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae8565b6116fe81602001516fffffffffffffffffffffffffffffffff166125c6565b6117b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60008381526033602052604090205460ff161561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae8565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118da611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193d576119368660400151876080015188606001518960a001516126c8565b9150611b90565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b67578560600151603d60008282546119c691906159d4565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190615766565b9050611a91876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127269092919063ffffffff16565b6060870151611aa090826159d4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190615766565b14611b65576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8b576119368660400151876080015160008960a001516126c8565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf290851515815260200190565b60405180910390a281158015611c085750326001145b15611c3f576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c548260106159eb565b610ffd90615208615a1b565b600080611c6b611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb2574791505090565b5050603d5490565b600054610100900460ff1615808015611cda5750600054600160ff909116105b80611cf45750303b158015611cf4575060005460ff166001145b611d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611dde57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9757603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9f612781565b8015611f0257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190615a47565b90939092509050565b818015611fe3575073ffffffffffffffffffffffffffffffffffffffff861615155b1561201a576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120248151611c47565b67ffffffffffffffff168367ffffffffffffffff161015612071576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120af576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120d0575033731111000000000000000000000000000000001111015b600086868686866040516020016120eb95949392919061596f565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215b91906155c5565b60405180910390a45050505050505050565b6001546000906121a3907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d4565b905060006121af612894565b90506000816020015160ff16826000015163ffffffff166121d09190615ab0565b9050821561230757600154600090612207908390700100000000000000000000000000000000900467ffffffffffffffff16615b18565b90506000836040015160ff168361221e9190615b8c565b60015461223e9084906fffffffffffffffffffffffffffffffff16615b8c565b6122489190615ab0565b600154909150600090612299906122729084906fffffffffffffffffffffffffffffffff16615c48565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612955565b905060018611156122c8576122c561227282876040015160ff1660018a6122c091906159d4565b612974565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061233a908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c7576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f3906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbc565b9050600061240548633b9aca006129c9565b61240f9083615cf9565b905060005a61241e90886159d4565b9050808211156108665761086661243582846159d4565b6129e0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f029085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a09565b60008160000151826020015183604001518460600151604051602001612555949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612555979096959101615d0d565b6000806125ae86612b15565b90506125bc81868686612b47565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265a9190615766565b61266490836157ae565b421192915050565b6001805482919060109061269f908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d8866000612b77565b90508061270e576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277c9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612494565b505050565b600054610100900460ff16612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae8565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c35760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615d78565b600061296a6129648585612b95565b83612ba5565b90505b9392505050565b6000670de0b6b3a76400006129b561298c8583615ab0565b61299e90670de0b6b3a7640000615b18565b6129b085670de0b6b3a7640000615b8c565b612bb4565b6129bf9086615b8c565b61296a9190615ab0565b6000818310156129d9578161296d565b5090919050565b6000805a90505b825a6129f390836159d4565b101561277c57612a0282615e1b565b91506129e7565b6000612a6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be59092919063ffffffff16565b80519091501561277c5780806020019051810190612a899190615952565b61277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae8565b60608180519060200120604051602001612b3191815260200190565b6040516020818303038152906040529050919050565b6000612b6e84612b58878686612bf4565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d9578161296d565b60008183126129d9578161296d565b600061296d670de0b6b3a764000083612bcc86613672565b612bd69190615b8c565b612be09190615ab0565b6138b6565b606061296a8484600085613af5565b60606000845111612c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae8565b6000612c6c84613c8b565b90506000612c7986613d77565b9050600084604051602001612c9091815260200190565b60405160208183030381529060405290506000805b84518110156135e9576000858281518110612cc257612cc2615e53565b602002602001015190508451831115612d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae8565b82600003612e165780518051602091820120604051612dab92612d8592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae8565b612f6d565b805151602011612ecc5780518051602091820120604051612e4092612d8592910190815260200190565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae8565b805184516020808701919091208251919092012014612f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae8565b612f79601060016157ae565b8160200151510361315557845183036130ed57612fb38160200151601081518110612fa657612fa6615e53565b6020026020010151613dda565b96506000875111613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae8565b6001865161305491906159d4565b82146130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae8565b50505050505061296d565b600085848151811061310157613101615e53565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312c5761312c615e53565b6020026020010151905061313f81613f3a565b955061314c6001866157ae565b945050506135d6565b60028160200151510361354e57600061316d82613f5f565b905060008160008151811061318457613184615e53565b016020015160f81c9050600061319b600283615e82565b6131a6906002615ea4565b905060006131b7848360ff16613f83565b905060006131c58a89613f83565b905060006131d38383613fb9565b905080835114613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae8565b60ff85166002148061327a575060ff85166003145b15613469578082511461330f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae8565b6133298760200151600181518110612fa657612fa6615e53565b9c5060008d51116133bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae8565b60018c516133ca91906159d4565b8814613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae8565b50505050505050505050505061296d565b60ff8516158061347c575060ff85166001145b156134bb576134a8876020015160018151811061349b5761349b615e53565b6020026020010151613f3a565b99506134b4818a6157ae565b9850613543565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae8565b5050505050506135d6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae8565b50806135e181615e1b565b915050612ca5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae8565b60008082136136dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b600060606136ea8461406d565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e757506000919050565b680755bf798b4a1bf1e58212613959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae8565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae8565b73ffffffffffffffffffffffffffffffffffffffff85163b613c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2e9190615ec7565b60006040518083038185875af1925050503d8060008114613c6b576040519150601f19603f3d011682016040523d82523d6000602084013e613c70565b606091505b5091509150613c80828286614143565b979650505050505050565b80516060908067ffffffffffffffff811115613ca957613ca9615233565b604051908082528060200260200182016040528015613cee57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc75790505b50915060005b81811015613d70576040518060400160405280858381518110613d1957613d19615e53565b60200260200101518152602001613d48868481518110613d3b57613d3b615e53565b6020026020010151614196565b815250838281518110613d5d57613d5d615e53565b6020908102919091010152600101613cf4565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dcf578060011b82018184015160001a8060041c8253600f811660018301535050600101613da1565b509295945050505050565b60606000806000613dea856141a9565b919450925090506000816001811115613e0557613e05615ee3565b14613e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae8565b613e9c82846157ae565b855114613f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae8565b612b6e85602001518484614c16565b60606020826000015110613f5657613f5182613dda565b610ffd565b610ffd82614caa565b6060610ffd613f7e8360200151600081518110612fa657612fa6615e53565b613d77565b606082518210613fa25750604080516020810190915260008152610ffd565b61296d8383848651613fb491906159d4565b614cc0565b6000808251845110613fcc578251613fcf565b83515b90505b80821080156140565750828281518110613fee57613fee615e53565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402d5761402d615e53565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406657816001019150613fd2565b5092915050565b60008082116140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415257508161296d565b8251156141625782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae891906155c5565b6060610ffd6141a483614e98565b614f81565b600080600080846000015111614267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b6020840151805160001a607f811161428c576000600160009450945094505050614c0f565b60b7811161449a5760006142a16080836159d4565b90508087600001511161435c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae8565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d557507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae8565b5060019550935060009250614c0f915050565b60bf81116147e85760006144af60b7836159d4565b90508087600001511161456a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c6037811161470c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae8565b61471681846157ae565b8951116147cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae8565b6147d68360016157ae565b9750955060009450614c0f9350505050565b60f781116148c95760006147fd60c0836159d4565b9050808760000151116148b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b600195509350849250614c0f915050565b60006148d660f7836159d4565b905080876000015111614991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c60378111614b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae8565b614b3d81846157ae565b895111614bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b614bfd8360016157ae565b9750955060019450614c0f9350505050565b9193909250565b60608167ffffffffffffffff811115614c3157614c31615233565b6040519080825280601f01601f191660200182016040528015614c5b576020820181803683370190505b509050811561296d576000614c7084866157ae565b90506020820160005b84811015614c91578281015182820152602001614c79565b84811115614ca0576000858301525b5050509392505050565b6060610ffd826020015160008460000151614c16565b60608182601f011015614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b828284011015614d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b81830184511015614e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae8565b606082158015614e275760405191506000825260208201604052614e8f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e60578051835260209283019201614e48565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f91856141a9565b919450925090506001816001811115614fac57614fac615ee3565b14615039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae8565b845161504583856157ae565b146150d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae8565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e95790505093506000835b86518110156151d75760008061515c6040518060400160405280858c6000015161514091906159d4565b8152602001858c6020015161515591906157ae565b90526141a9565b50915091506040518060400160405280838361517891906157ae565b8152602001848b6020015161518d91906157ae565b8152508885815181106151a2576151a2615e53565b60209081029190910101526151b86001856157ae565b93506151c481836157ae565b6151ce90846157ae565b92505050615116565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520557600080fd5b50565b803567ffffffffffffffff8116811461522057600080fd5b919050565b801515811461520557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a9576152a9615233565b604052919050565b600082601f8301126152c257600080fd5b813567ffffffffffffffff8111156152dc576152dc615233565b61530d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615262565b81815284602083860101111561532257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535857600080fd5b8635615363816151e3565b9550602087013594506040870135935061537f60608801615208565b9250608087013561538f81615225565b915060a087013567ffffffffffffffff8111156153ab57600080fd5b6153b789828a016152b1565b9150509295509295509295565b600060c082840312156153d657600080fd5b60405160c0810167ffffffffffffffff82821081831117156153fa576153fa615233565b816040528293508435835260208501359150615415826151e3565b8160208401526040850135915061542b826151e3565b816040840152606085013560608401526080850135608084015260a085013591508082111561545957600080fd5b50615466858286016152b1565b60a0830152505092915050565b600080600080600085870360e081121561548c57600080fd5b863567ffffffffffffffff808211156154a457600080fd5b6154b08a838b016153c4565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e957600080fd5b60408901955060c089013592508083111561550357600080fd5b828901925089601f84011261551757600080fd5b823591508082111561552857600080fd5b508860208260051b840101111561553e57600080fd5b959894975092955050506020019190565b60005b8381101561556a578181015183820152602001615552565b83811115611f025750506000910152565b6000815180845261559381602086016020860161554f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296d602083018461557b565b6000602082840312156155ea57600080fd5b5035919050565b60ff8116811461520557600080fd5b6000806000806080858703121561561657600080fd5b8435615621816151e3565b93506020850135615631816155f1565b93969395505050506040820135916060013590565b60006020828403121561565857600080fd5b813567ffffffffffffffff81111561566f57600080fd5b61567b848285016153c4565b949350505050565b60006020828403121561569557600080fd5b61296d82615208565b6000806000606084860312156156b357600080fd5b83356156be816151e3565b925060208401356156ce816151e3565b915060408401356156de816151e3565b809150509250925092565b600080600080600060a0868803121561570157600080fd5b853561570c816151e3565b94506020860135935061572160408701615208565b9250606086013561573181615225565b9150608086013567ffffffffffffffff81111561574d57600080fd5b615759888289016152b1565b9150509295509295909350565b60006020828403121561577857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157c1576157c161577f565b500190565b6000602082840312156157d857600080fd5b815161296d816151e3565b80516fffffffffffffffffffffffffffffffff8116811461522057600080fd5b60006060828403121561581557600080fd5b6040516060810181811067ffffffffffffffff8211171561583857615838615233565b6040528251815261584b602084016157e3565b602082015261585c604084016157e3565b60408201529392505050565b60006080828403121561587a57600080fd5b6040516080810181811067ffffffffffffffff8211171561589d5761589d615233565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e9576158e9615233565b8360051b60206158fa818301615262565b86815291850191818101903684111561591257600080fd5b865b848110156159465780358681111561592c5760008081fd5b61593836828b016152b1565b845250918301918301615914565b50979650505050505050565b60006020828403121561596457600080fd5b815161296d81615225565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c381604985016020870161554f565b919091016049019695505050505050565b6000828210156159e6576159e661577f565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1257615a1261577f565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3e57615a3e61577f565b01949350505050565b60008060408385031215615a5a57600080fd5b8251615a65816151e3565b6020840151909250615a76816155f1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abf57615abf615a81565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1357615b1361577f565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5257615b5261577f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8657615b8661577f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcd57615bcd61577f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0857615c0861577f565b60008712925087820587128484161615615c2457615c2461577f565b87850587128184161615615c3a57615c3a61577f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8257615c8261577f565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb657615cb661577f565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf457615cf461577f565b500290565b600082615d0857615d08615a81565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5860c083018461557b565b98975050505050505050565b805163ffffffff8116811461522057600080fd5b600060c08284031215615d8a57600080fd5b60405160c0810181811067ffffffffffffffff82111715615dad57615dad615233565b604052615db983615d64565b81526020830151615dc9816155f1565b60208201526040830151615ddc816155f1565b6040820152615ded60608401615d64565b6060820152615dfe60808401615d64565b6080820152615e0f60a084016157e3565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4c57615e4c61577f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9557615e95615a81565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebe57615ebe61577f565b90039392505050565b60008251615ed981846020870161554f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533f565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc610870565b34801561025957600080fd5b50610188610268366004615473565b610908565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c5565b3480156102cf57600080fd5b506102d8610eb5565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d8565b610f48565b34801561031457600080fd5b50610188610323366004615600565b611003565b34801561033457600080fd5b50610188610343366004615646565b6111c5565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d8565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615683565b611c47565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c60565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569e565b611cba565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d8565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e9565b8260005a90506000610599611f24565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc1565b50610625828261216d565b50505050505050565b8260005a9050600061063e611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190615766565b905061076573ffffffffffffffffffffffffffffffffffffffff831633308c61243a565b61076f89826157ae565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190615766565b14610834576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461084691906157ae565b9091555061085a90508a8a8a8a8a8a611fc1565b5050610866828261216d565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090391906157c6565b905090565b610910610eb5565b15610947576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109b0576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190615803565b519050610a5e610a5936869003860186615868565b612516565b8114610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afc87612572565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c125750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e9190615803565b5114155b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae8565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d679101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5d888a6158ce565b8a604001356125a2565b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae8565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615952565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffd9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe29190615803565b602001516fffffffffffffffffffffffffffffffff166125c6565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611054576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110606201388061266c565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117d9695949392910161596f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b5916155c5565b60405180910390a450505050565b565b6111cd610eb5565b15611204576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611257576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126282612572565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae8565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190615766565b81602001516fffffffffffffffffffffffffffffffff1610156114a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae8565b6114c881602001516fffffffffffffffffffffffffffffffff166125c6565b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190615803565b82518151919250146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae8565b6116fe81602001516fffffffffffffffffffffffffffffffff166125c6565b6117b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60008381526033602052604090205460ff161561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae8565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118da611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193d576119368660400151876080015188606001518960a001516126c8565b9150611b90565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b67578560600151603d60008282546119c691906159d4565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190615766565b9050611a91876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127269092919063ffffffff16565b6060870151611aa090826159d4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190615766565b14611b65576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8b576119368660400151876080015160008960a001516126c8565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf290851515815260200190565b60405180910390a281158015611c085750326001145b15611c3f576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c548260106159eb565b610ffd90615208615a1b565b600080611c6b611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb2574791505090565b5050603d5490565b600054610100900460ff1615808015611cda5750600054600160ff909116105b80611cf45750303b158015611cf4575060005460ff166001145b611d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611dde57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9757603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9f612781565b8015611f0257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190615a47565b90939092509050565b818015611fe3575073ffffffffffffffffffffffffffffffffffffffff861615155b1561201a576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120248151611c47565b67ffffffffffffffff168367ffffffffffffffff161015612071576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120af576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120d0575033731111000000000000000000000000000000001111015b600086868686866040516020016120eb95949392919061596f565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215b91906155c5565b60405180910390a45050505050505050565b6001546000906121a3907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d4565b905060006121af612894565b90506000816020015160ff16826000015163ffffffff166121d09190615ab0565b9050821561230757600154600090612207908390700100000000000000000000000000000000900467ffffffffffffffff16615b18565b90506000836040015160ff168361221e9190615b8c565b60015461223e9084906fffffffffffffffffffffffffffffffff16615b8c565b6122489190615ab0565b600154909150600090612299906122729084906fffffffffffffffffffffffffffffffff16615c48565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612955565b905060018611156122c8576122c561227282876040015160ff1660018a6122c091906159d4565b612974565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061233a908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c7576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f3906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbc565b9050600061240548633b9aca006129c9565b61240f9083615cf9565b905060005a61241e90886159d4565b9050808211156108665761086661243582846159d4565b6129e0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f029085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a09565b60008160000151826020015183604001518460600151604051602001612555949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612555979096959101615d0d565b6000806125ae86612b15565b90506125bc81868686612b47565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265a9190615766565b61266490836157ae565b421192915050565b6001805482919060109061269f908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d8866000612b77565b90508061270e576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277c9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612494565b505050565b600054610100900460ff16612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae8565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c35760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615d78565b600061296a6129648585612b95565b83612ba5565b90505b9392505050565b6000670de0b6b3a76400006129b561298c8583615ab0565b61299e90670de0b6b3a7640000615b18565b6129b085670de0b6b3a7640000615b8c565b612bb4565b6129bf9086615b8c565b61296a9190615ab0565b6000818310156129d9578161296d565b5090919050565b6000805a90505b825a6129f390836159d4565b101561277c57612a0282615e1b565b91506129e7565b6000612a6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be59092919063ffffffff16565b80519091501561277c5780806020019051810190612a899190615952565b61277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae8565b60608180519060200120604051602001612b3191815260200190565b6040516020818303038152906040529050919050565b6000612b6e84612b58878686612bf4565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d9578161296d565b60008183126129d9578161296d565b600061296d670de0b6b3a764000083612bcc86613672565b612bd69190615b8c565b612be09190615ab0565b6138b6565b606061296a8484600085613af5565b60606000845111612c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae8565b6000612c6c84613c8b565b90506000612c7986613d77565b9050600084604051602001612c9091815260200190565b60405160208183030381529060405290506000805b84518110156135e9576000858281518110612cc257612cc2615e53565b602002602001015190508451831115612d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae8565b82600003612e165780518051602091820120604051612dab92612d8592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae8565b612f6d565b805151602011612ecc5780518051602091820120604051612e4092612d8592910190815260200190565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae8565b805184516020808701919091208251919092012014612f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae8565b612f79601060016157ae565b8160200151510361315557845183036130ed57612fb38160200151601081518110612fa657612fa6615e53565b6020026020010151613dda565b96506000875111613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae8565b6001865161305491906159d4565b82146130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae8565b50505050505061296d565b600085848151811061310157613101615e53565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312c5761312c615e53565b6020026020010151905061313f81613f3a565b955061314c6001866157ae565b945050506135d6565b60028160200151510361354e57600061316d82613f5f565b905060008160008151811061318457613184615e53565b016020015160f81c9050600061319b600283615e82565b6131a6906002615ea4565b905060006131b7848360ff16613f83565b905060006131c58a89613f83565b905060006131d38383613fb9565b905080835114613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae8565b60ff85166002148061327a575060ff85166003145b15613469578082511461330f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae8565b6133298760200151600181518110612fa657612fa6615e53565b9c5060008d51116133bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae8565b60018c516133ca91906159d4565b8814613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae8565b50505050505050505050505061296d565b60ff8516158061347c575060ff85166001145b156134bb576134a8876020015160018151811061349b5761349b615e53565b6020026020010151613f3a565b99506134b4818a6157ae565b9850613543565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae8565b5050505050506135d6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae8565b50806135e181615e1b565b915050612ca5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae8565b60008082136136dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b600060606136ea8461406d565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e757506000919050565b680755bf798b4a1bf1e58212613959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae8565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae8565b73ffffffffffffffffffffffffffffffffffffffff85163b613c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2e9190615ec7565b60006040518083038185875af1925050503d8060008114613c6b576040519150601f19603f3d011682016040523d82523d6000602084013e613c70565b606091505b5091509150613c80828286614143565b979650505050505050565b80516060908067ffffffffffffffff811115613ca957613ca9615233565b604051908082528060200260200182016040528015613cee57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc75790505b50915060005b81811015613d70576040518060400160405280858381518110613d1957613d19615e53565b60200260200101518152602001613d48868481518110613d3b57613d3b615e53565b6020026020010151614196565b815250838281518110613d5d57613d5d615e53565b6020908102919091010152600101613cf4565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dcf578060011b82018184015160001a8060041c8253600f811660018301535050600101613da1565b509295945050505050565b60606000806000613dea856141a9565b919450925090506000816001811115613e0557613e05615ee3565b14613e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae8565b613e9c82846157ae565b855114613f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae8565b612b6e85602001518484614c16565b60606020826000015110613f5657613f5182613dda565b610ffd565b610ffd82614caa565b6060610ffd613f7e8360200151600081518110612fa657612fa6615e53565b613d77565b606082518210613fa25750604080516020810190915260008152610ffd565b61296d8383848651613fb491906159d4565b614cc0565b6000808251845110613fcc578251613fcf565b83515b90505b80821080156140565750828281518110613fee57613fee615e53565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402d5761402d615e53565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406657816001019150613fd2565b5092915050565b60008082116140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415257508161296d565b8251156141625782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae891906155c5565b6060610ffd6141a483614e98565b614f81565b600080600080846000015111614267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b6020840151805160001a607f811161428c576000600160009450945094505050614c0f565b60b7811161449a5760006142a16080836159d4565b90508087600001511161435c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae8565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d557507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae8565b5060019550935060009250614c0f915050565b60bf81116147e85760006144af60b7836159d4565b90508087600001511161456a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c6037811161470c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae8565b61471681846157ae565b8951116147cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae8565b6147d68360016157ae565b9750955060009450614c0f9350505050565b60f781116148c95760006147fd60c0836159d4565b9050808760000151116148b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b600195509350849250614c0f915050565b60006148d660f7836159d4565b905080876000015111614991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c60378111614b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae8565b614b3d81846157ae565b895111614bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b614bfd8360016157ae565b9750955060019450614c0f9350505050565b9193909250565b60608167ffffffffffffffff811115614c3157614c31615233565b6040519080825280601f01601f191660200182016040528015614c5b576020820181803683370190505b509050811561296d576000614c7084866157ae565b90506020820160005b84811015614c91578281015182820152602001614c79565b84811115614ca0576000858301525b5050509392505050565b6060610ffd826020015160008460000151614c16565b60608182601f011015614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b828284011015614d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b81830184511015614e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae8565b606082158015614e275760405191506000825260208201604052614e8f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e60578051835260209283019201614e48565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f91856141a9565b919450925090506001816001811115614fac57614fac615ee3565b14615039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae8565b845161504583856157ae565b146150d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae8565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e95790505093506000835b86518110156151d75760008061515c6040518060400160405280858c6000015161514091906159d4565b8152602001858c6020015161515591906157ae565b90526141a9565b50915091506040518060400160405280838361517891906157ae565b8152602001848b6020015161518d91906157ae565b8152508885815181106151a2576151a2615e53565b60209081029190910101526151b86001856157ae565b93506151c481836157ae565b6151ce90846157ae565b92505050615116565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520557600080fd5b50565b803567ffffffffffffffff8116811461522057600080fd5b919050565b801515811461520557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a9576152a9615233565b604052919050565b600082601f8301126152c257600080fd5b813567ffffffffffffffff8111156152dc576152dc615233565b61530d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615262565b81815284602083860101111561532257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535857600080fd5b8635615363816151e3565b9550602087013594506040870135935061537f60608801615208565b9250608087013561538f81615225565b915060a087013567ffffffffffffffff8111156153ab57600080fd5b6153b789828a016152b1565b9150509295509295509295565b600060c082840312156153d657600080fd5b60405160c0810167ffffffffffffffff82821081831117156153fa576153fa615233565b816040528293508435835260208501359150615415826151e3565b8160208401526040850135915061542b826151e3565b816040840152606085013560608401526080850135608084015260a085013591508082111561545957600080fd5b50615466858286016152b1565b60a0830152505092915050565b600080600080600085870360e081121561548c57600080fd5b863567ffffffffffffffff808211156154a457600080fd5b6154b08a838b016153c4565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e957600080fd5b60408901955060c089013592508083111561550357600080fd5b828901925089601f84011261551757600080fd5b823591508082111561552857600080fd5b508860208260051b840101111561553e57600080fd5b959894975092955050506020019190565b60005b8381101561556a578181015183820152602001615552565b83811115611f025750506000910152565b6000815180845261559381602086016020860161554f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296d602083018461557b565b6000602082840312156155ea57600080fd5b5035919050565b60ff8116811461520557600080fd5b6000806000806080858703121561561657600080fd5b8435615621816151e3565b93506020850135615631816155f1565b93969395505050506040820135916060013590565b60006020828403121561565857600080fd5b813567ffffffffffffffff81111561566f57600080fd5b61567b848285016153c4565b949350505050565b60006020828403121561569557600080fd5b61296d82615208565b6000806000606084860312156156b357600080fd5b83356156be816151e3565b925060208401356156ce816151e3565b915060408401356156de816151e3565b809150509250925092565b600080600080600060a0868803121561570157600080fd5b853561570c816151e3565b94506020860135935061572160408701615208565b9250606086013561573181615225565b9150608086013567ffffffffffffffff81111561574d57600080fd5b615759888289016152b1565b9150509295509295909350565b60006020828403121561577857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157c1576157c161577f565b500190565b6000602082840312156157d857600080fd5b815161296d816151e3565b80516fffffffffffffffffffffffffffffffff8116811461522057600080fd5b60006060828403121561581557600080fd5b6040516060810181811067ffffffffffffffff8211171561583857615838615233565b6040528251815261584b602084016157e3565b602082015261585c604084016157e3565b60408201529392505050565b60006080828403121561587a57600080fd5b6040516080810181811067ffffffffffffffff8211171561589d5761589d615233565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e9576158e9615233565b8360051b60206158fa818301615262565b86815291850191818101903684111561591257600080fd5b865b848110156159465780358681111561592c5760008081fd5b61593836828b016152b1565b845250918301918301615914565b50979650505050505050565b60006020828403121561596457600080fd5b815161296d81615225565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c381604985016020870161554f565b919091016049019695505050505050565b6000828210156159e6576159e661577f565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1257615a1261577f565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3e57615a3e61577f565b01949350505050565b60008060408385031215615a5a57600080fd5b8251615a65816151e3565b6020840151909250615a76816155f1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abf57615abf615a81565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1357615b1361577f565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5257615b5261577f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8657615b8661577f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcd57615bcd61577f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0857615c0861577f565b60008712925087820587128484161615615c2457615c2461577f565b87850587128184161615615c3a57615c3a61577f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8257615c8261577f565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb657615cb661577f565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf457615cf461577f565b500290565b600082615d0857615d08615a81565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5860c083018461557b565b98975050505050505050565b805163ffffffff8116811461522057600080fd5b600060c08284031215615d8a57600080fd5b60405160c0810181811067ffffffffffffffff82111715615dad57615dad615233565b604052615db983615d64565b81526020830151615dc9816155f1565b60208201526040830151615ddc816155f1565b6040820152615ded60608401615d64565b6060820152615dfe60808401615d64565b6080820152615e0f60a084016157e3565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4c57615e4c61577f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9557615e95615a81565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebe57615ebe61577f565b90039392505050565b60008251615ed981846020870161554f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001f071760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f1e806200029f6000396000f3fe6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533e565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615472565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c4565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d7565b610f47565b34801561031457600080fd5b506101886103233660046155ff565b611002565b34801561033457600080fd5b50610188610343366004615645565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d7565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615682565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569d565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d7565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e8565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c29190615794565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157ac565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b6107868982615794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157ac565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157c5565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615802565b519050610a5d610a5836869003860186615867565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615802565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158cd565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615951565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615802565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c9695949392910161596e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155c4565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157ac565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615802565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126c7565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d3565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157ac565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127259092919063ffffffff16565b6060870151611a9f90826159d3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157ac565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126c7565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159ea565b610ffc90615208615a1a565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612780565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a46565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea95949392919061596e565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155c4565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d3565b905060006121ae612893565b90506000816020015160ff16826000015163ffffffff166121cf9190615aaf565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b17565b90506000836040015160ff168361221d9190615b8b565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b8b565b6122479190615aaf565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c47565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612954565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d3565b612973565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbb565b9050600061240448633b9aca006129c8565b61240e9083615cf8565b905060005a61241d90886159d3565b9050808211156108655761086561243482846159d3565b6129df565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a08565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d0c565b6000806125ad86612b14565b90506125bb81868686612b46565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157ac565b6126639083615794565b421192915050565b6001805482919060109061269e908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d7866000612b76565b90508061270d576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff16612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d77565b60006129696129638585612b94565b83612ba4565b90505b9392505050565b6000670de0b6b3a76400006129b461298b8583615aaf565b61299d90670de0b6b3a7640000615b17565b6129af85670de0b6b3a7640000615b8b565b612bb3565b6129be9086615b8b565b6129699190615aaf565b6000818310156129d8578161296c565b5090919050565b6000805a90505b825a6129f290836159d3565b101561277b57612a0182615e1a565b91506129e6565b6000612a6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be49092919063ffffffff16565b80519091501561277b5780806020019051810190612a889190615951565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3091815260200190565b6040516020818303038152906040529050919050565b6000612b6d84612b57878686612bf3565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d8578161296c565b60008183126129d8578161296c565b600061296c670de0b6b3a764000083612bcb86613671565b612bd59190615b8b565b612bdf9190615aaf565b6138b5565b60606129698484600085613af4565b60606000845111612c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c6b84613c8a565b90506000612c7886613d76565b9050600084604051602001612c8f91815260200190565b60405160208183030381529060405290506000805b84518110156135e8576000858281518110612cc157612cc1615e52565b602002602001015190508451831115612d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e155780518051602091820120604051612daa92612d8492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f6c565b805151602011612ecb5780518051602091820120604051612e3f92612d8492910190815260200190565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7860106001615794565b8160200151510361315457845183036130ec57612fb28160200151601081518110612fa557612fa5615e52565b6020026020010151613dd9565b96506000875111613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305391906159d3565b82146130e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b50505050505061296c565b600085848151811061310057613100615e52565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312b5761312b615e52565b6020026020010151905061313e81613f39565b955061314b600186615794565b945050506135d5565b60028160200151510361354d57600061316c82613f5e565b905060008160008151811061318357613183615e52565b016020015160f81c9050600061319a600283615e81565b6131a5906002615ea3565b905060006131b6848360ff16613f82565b905060006131c48a89613f82565b905060006131d28383613fb8565b905080835114613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff851660021480613279575060ff85166003145b15613468578082511461330e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b6133288760200151600181518110612fa557612fa5615e52565b9c5060008d51116133bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133c991906159d3565b8814613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b50505050505050505050505061296c565b60ff8516158061347b575060ff85166001145b156134ba576134a7876020015160018151811061349a5761349a615e52565b6020026020010151613f39565b99506134b3818a615794565b9850613542565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135d5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e081615e1a565b915050612ca4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136e98461406c565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e657506000919050565b680755bf798b4a1bf1e58212613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2d9190615ec6565b60006040518083038185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b5091509150613c7f828286614142565b979650505050505050565b80516060908067ffffffffffffffff811115613ca857613ca8615232565b604051908082528060200260200182016040528015613ced57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc65790505b50915060005b81811015613d6f576040518060400160405280858381518110613d1857613d18615e52565b60200260200101518152602001613d47868481518110613d3a57613d3a615e52565b6020026020010151614195565b815250838281518110613d5c57613d5c615e52565b6020908102919091010152600101613cf3565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dce578060011b82018184015160001a8060041c8253600f811660018301535050600101613da0565b509295945050505050565b60606000806000613de9856141a8565b919450925090506000816001811115613e0457613e04615ee2565b14613e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613e9b8284615794565b855114613f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b6d85602001518484614c15565b60606020826000015110613f5557613f5082613dd9565b610ffc565b610ffc82614ca9565b6060610ffc613f7d8360200151600081518110612fa557612fa5615e52565b613d76565b606082518210613fa15750604080516020810190915260008152610ffc565b61296c8383848651613fb391906159d3565b614cbf565b6000808251845110613fcb578251613fce565b83515b90505b80821080156140555750828281518110613fed57613fed615e52565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402c5761402c615e52565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406557816001019150613fd1565b5092915050565b60008082116140d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415157508161296c565b8251156141615782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155c4565b6060610ffc6141a383614e97565b614f80565b600080600080846000015111614266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f811161428b576000600160009450945094505050614c0e565b60b781116144995760006142a06080836159d3565b90508087600001511161435b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d457507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c0e915050565b60bf81116147e75760006144ae60b7836159d3565b905080876000015111614569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c6037811161470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b6147158184615794565b8951116147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147d5836001615794565b9750955060009450614c0e9350505050565b60f781116148c85760006147fc60c0836159d3565b9050808760000151116148b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c0e915050565b60006148d560f7836159d3565b905080876000015111614990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b3c8184615794565b895111614bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614bfc836001615794565b9750955060019450614c0e9350505050565b9193909250565b60608167ffffffffffffffff811115614c3057614c30615232565b6040519080825280601f01601f191660200182016040528015614c5a576020820181803683370190505b509050811561296c576000614c6f8486615794565b90506020820160005b84811015614c90578281015182820152602001614c78565b84811115614c9f576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c15565b60608182601f011015614d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e265760405191506000825260208201604052614e8e565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e5f578051835260209283019201614e47565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f90856141a8565b919450925090506001816001811115614fab57614fab615ee2565b14615038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b84516150448385615794565b146150d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e85790505093506000835b86518110156151d65760008061515b6040518060400160405280858c6000015161513f91906159d3565b8152602001858c602001516151549190615794565b90526141a8565b5091509150604051806040016040528083836151779190615794565b8152602001848b6020015161518c9190615794565b8152508885815181106151a1576151a1615e52565b60209081029190910101526151b7600185615794565b93506151c38183615794565b6151cd9084615794565b92505050615115565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520457600080fd5b50565b803567ffffffffffffffff8116811461521f57600080fd5b919050565b801515811461520457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a8576152a8615232565b604052919050565b600082601f8301126152c157600080fd5b813567ffffffffffffffff8111156152db576152db615232565b61530c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615261565b81815284602083860101111561532157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535757600080fd5b8635615362816151e2565b9550602087013594506040870135935061537e60608801615207565b9250608087013561538e81615224565b915060a087013567ffffffffffffffff8111156153aa57600080fd5b6153b689828a016152b0565b9150509295509295509295565b600060c082840312156153d557600080fd5b60405160c0810167ffffffffffffffff82821081831117156153f9576153f9615232565b816040528293508435835260208501359150615414826151e2565b8160208401526040850135915061542a826151e2565b816040840152606085013560608401526080850135608084015260a085013591508082111561545857600080fd5b50615465858286016152b0565b60a0830152505092915050565b600080600080600085870360e081121561548b57600080fd5b863567ffffffffffffffff808211156154a357600080fd5b6154af8a838b016153c3565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e857600080fd5b60408901955060c089013592508083111561550257600080fd5b828901925089601f84011261551657600080fd5b823591508082111561552757600080fd5b508860208260051b840101111561553d57600080fd5b959894975092955050506020019190565b60005b83811015615569578181015183820152602001615551565b83811115611f015750506000910152565b6000815180845261559281602086016020860161554e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296c602083018461557a565b6000602082840312156155e957600080fd5b5035919050565b60ff8116811461520457600080fd5b6000806000806080858703121561561557600080fd5b8435615620816151e2565b93506020850135615630816155f0565b93969395505050506040820135916060013590565b60006020828403121561565757600080fd5b813567ffffffffffffffff81111561566e57600080fd5b61567a848285016153c3565b949350505050565b60006020828403121561569457600080fd5b61296c82615207565b6000806000606084860312156156b257600080fd5b83356156bd816151e2565b925060208401356156cd816151e2565b915060408401356156dd816151e2565b809150509250925092565b600080600080600060a0868803121561570057600080fd5b853561570b816151e2565b94506020860135935061572060408701615207565b9250606086013561573081615224565b9150608086013567ffffffffffffffff81111561574c57600080fd5b615758888289016152b0565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157a7576157a7615765565b500190565b6000602082840312156157be57600080fd5b5051919050565b6000602082840312156157d757600080fd5b815161296c816151e2565b80516fffffffffffffffffffffffffffffffff8116811461521f57600080fd5b60006060828403121561581457600080fd5b6040516060810181811067ffffffffffffffff8211171561583757615837615232565b6040528251815261584a602084016157e2565b602082015261585b604084016157e2565b60408201529392505050565b60006080828403121561587957600080fd5b6040516080810181811067ffffffffffffffff8211171561589c5761589c615232565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e8576158e8615232565b8360051b60206158f9818301615261565b86815291850191818101903684111561591157600080fd5b865b848110156159455780358681111561592b5760008081fd5b61593736828b016152b0565b845250918301918301615913565b50979650505050505050565b60006020828403121561596357600080fd5b815161296c81615224565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c281604985016020870161554e565b919091016049019695505050505050565b6000828210156159e5576159e5615765565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1157615a11615765565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3d57615a3d615765565b01949350505050565b60008060408385031215615a5957600080fd5b8251615a64816151e2565b6020840151909250615a75816155f0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abe57615abe615a80565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1257615b12615765565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5157615b51615765565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8557615b85615765565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcc57615bcc615765565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0757615c07615765565b60008712925087820587128484161615615c2357615c23615765565b87850587128184161615615c3957615c39615765565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8157615c81615765565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb557615cb5615765565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf357615cf3615765565b500290565b600082615d0757615d07615a80565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5760c083018461557a565b98975050505050505050565b805163ffffffff8116811461521f57600080fd5b600060c08284031215615d8957600080fd5b60405160c0810181811067ffffffffffffffff82111715615dac57615dac615232565b604052615db883615d63565b81526020830151615dc8816155f0565b60208201526040830151615ddb816155f0565b6040820152615dec60608401615d63565b6060820152615dfd60808401615d63565b6080820152615e0e60a084016157e2565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4b57615e4b615765565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9457615e94615a80565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebd57615ebd615765565b90039392505050565b60008251615ed881846020870161554e565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "deployedCode": "0x6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533e565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615472565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c4565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d7565b610f47565b34801561031457600080fd5b506101886103233660046155ff565b611002565b34801561033457600080fd5b50610188610343366004615645565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d7565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615682565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569d565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d7565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e8565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c29190615794565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157ac565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b6107868982615794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157ac565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157c5565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615802565b519050610a5d610a5836869003860186615867565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615802565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158cd565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615951565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615802565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c9695949392910161596e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155c4565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157ac565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615802565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126c7565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d3565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157ac565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127259092919063ffffffff16565b6060870151611a9f90826159d3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157ac565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126c7565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159ea565b610ffc90615208615a1a565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612780565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a46565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea95949392919061596e565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155c4565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d3565b905060006121ae612893565b90506000816020015160ff16826000015163ffffffff166121cf9190615aaf565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b17565b90506000836040015160ff168361221d9190615b8b565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b8b565b6122479190615aaf565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c47565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612954565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d3565b612973565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbb565b9050600061240448633b9aca006129c8565b61240e9083615cf8565b905060005a61241d90886159d3565b9050808211156108655761086561243482846159d3565b6129df565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a08565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d0c565b6000806125ad86612b14565b90506125bb81868686612b46565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157ac565b6126639083615794565b421192915050565b6001805482919060109061269e908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d7866000612b76565b90508061270d576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff16612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d77565b60006129696129638585612b94565b83612ba4565b90505b9392505050565b6000670de0b6b3a76400006129b461298b8583615aaf565b61299d90670de0b6b3a7640000615b17565b6129af85670de0b6b3a7640000615b8b565b612bb3565b6129be9086615b8b565b6129699190615aaf565b6000818310156129d8578161296c565b5090919050565b6000805a90505b825a6129f290836159d3565b101561277b57612a0182615e1a565b91506129e6565b6000612a6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be49092919063ffffffff16565b80519091501561277b5780806020019051810190612a889190615951565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3091815260200190565b6040516020818303038152906040529050919050565b6000612b6d84612b57878686612bf3565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d8578161296c565b60008183126129d8578161296c565b600061296c670de0b6b3a764000083612bcb86613671565b612bd59190615b8b565b612bdf9190615aaf565b6138b5565b60606129698484600085613af4565b60606000845111612c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c6b84613c8a565b90506000612c7886613d76565b9050600084604051602001612c8f91815260200190565b60405160208183030381529060405290506000805b84518110156135e8576000858281518110612cc157612cc1615e52565b602002602001015190508451831115612d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e155780518051602091820120604051612daa92612d8492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f6c565b805151602011612ecb5780518051602091820120604051612e3f92612d8492910190815260200190565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7860106001615794565b8160200151510361315457845183036130ec57612fb28160200151601081518110612fa557612fa5615e52565b6020026020010151613dd9565b96506000875111613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305391906159d3565b82146130e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b50505050505061296c565b600085848151811061310057613100615e52565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312b5761312b615e52565b6020026020010151905061313e81613f39565b955061314b600186615794565b945050506135d5565b60028160200151510361354d57600061316c82613f5e565b905060008160008151811061318357613183615e52565b016020015160f81c9050600061319a600283615e81565b6131a5906002615ea3565b905060006131b6848360ff16613f82565b905060006131c48a89613f82565b905060006131d28383613fb8565b905080835114613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff851660021480613279575060ff85166003145b15613468578082511461330e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b6133288760200151600181518110612fa557612fa5615e52565b9c5060008d51116133bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133c991906159d3565b8814613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b50505050505050505050505061296c565b60ff8516158061347b575060ff85166001145b156134ba576134a7876020015160018151811061349a5761349a615e52565b6020026020010151613f39565b99506134b3818a615794565b9850613542565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135d5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e081615e1a565b915050612ca4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136e98461406c565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e657506000919050565b680755bf798b4a1bf1e58212613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2d9190615ec6565b60006040518083038185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b5091509150613c7f828286614142565b979650505050505050565b80516060908067ffffffffffffffff811115613ca857613ca8615232565b604051908082528060200260200182016040528015613ced57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc65790505b50915060005b81811015613d6f576040518060400160405280858381518110613d1857613d18615e52565b60200260200101518152602001613d47868481518110613d3a57613d3a615e52565b6020026020010151614195565b815250838281518110613d5c57613d5c615e52565b6020908102919091010152600101613cf3565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dce578060011b82018184015160001a8060041c8253600f811660018301535050600101613da0565b509295945050505050565b60606000806000613de9856141a8565b919450925090506000816001811115613e0457613e04615ee2565b14613e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613e9b8284615794565b855114613f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b6d85602001518484614c15565b60606020826000015110613f5557613f5082613dd9565b610ffc565b610ffc82614ca9565b6060610ffc613f7d8360200151600081518110612fa557612fa5615e52565b613d76565b606082518210613fa15750604080516020810190915260008152610ffc565b61296c8383848651613fb391906159d3565b614cbf565b6000808251845110613fcb578251613fce565b83515b90505b80821080156140555750828281518110613fed57613fed615e52565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402c5761402c615e52565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406557816001019150613fd1565b5092915050565b60008082116140d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415157508161296c565b8251156141615782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155c4565b6060610ffc6141a383614e97565b614f80565b600080600080846000015111614266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f811161428b576000600160009450945094505050614c0e565b60b781116144995760006142a06080836159d3565b90508087600001511161435b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d457507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c0e915050565b60bf81116147e75760006144ae60b7836159d3565b905080876000015111614569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c6037811161470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b6147158184615794565b8951116147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147d5836001615794565b9750955060009450614c0e9350505050565b60f781116148c85760006147fc60c0836159d3565b9050808760000151116148b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c0e915050565b60006148d560f7836159d3565b905080876000015111614990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b3c8184615794565b895111614bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614bfc836001615794565b9750955060019450614c0e9350505050565b9193909250565b60608167ffffffffffffffff811115614c3057614c30615232565b6040519080825280601f01601f191660200182016040528015614c5a576020820181803683370190505b509050811561296c576000614c6f8486615794565b90506020820160005b84811015614c90578281015182820152602001614c78565b84811115614c9f576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c15565b60608182601f011015614d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e265760405191506000825260208201604052614e8e565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e5f578051835260209283019201614e47565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f90856141a8565b919450925090506001816001811115614fab57614fab615ee2565b14615038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b84516150448385615794565b146150d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e85790505093506000835b86518110156151d65760008061515b6040518060400160405280858c6000015161513f91906159d3565b8152602001858c602001516151549190615794565b90526141a8565b5091509150604051806040016040528083836151779190615794565b8152602001848b6020015161518c9190615794565b8152508885815181106151a1576151a1615e52565b60209081029190910101526151b7600185615794565b93506151c38183615794565b6151cd9084615794565b92505050615115565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520457600080fd5b50565b803567ffffffffffffffff8116811461521f57600080fd5b919050565b801515811461520457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a8576152a8615232565b604052919050565b600082601f8301126152c157600080fd5b813567ffffffffffffffff8111156152db576152db615232565b61530c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615261565b81815284602083860101111561532157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535757600080fd5b8635615362816151e2565b9550602087013594506040870135935061537e60608801615207565b9250608087013561538e81615224565b915060a087013567ffffffffffffffff8111156153aa57600080fd5b6153b689828a016152b0565b9150509295509295509295565b600060c082840312156153d557600080fd5b60405160c0810167ffffffffffffffff82821081831117156153f9576153f9615232565b816040528293508435835260208501359150615414826151e2565b8160208401526040850135915061542a826151e2565b816040840152606085013560608401526080850135608084015260a085013591508082111561545857600080fd5b50615465858286016152b0565b60a0830152505092915050565b600080600080600085870360e081121561548b57600080fd5b863567ffffffffffffffff808211156154a357600080fd5b6154af8a838b016153c3565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e857600080fd5b60408901955060c089013592508083111561550257600080fd5b828901925089601f84011261551657600080fd5b823591508082111561552757600080fd5b508860208260051b840101111561553d57600080fd5b959894975092955050506020019190565b60005b83811015615569578181015183820152602001615551565b83811115611f015750506000910152565b6000815180845261559281602086016020860161554e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296c602083018461557a565b6000602082840312156155e957600080fd5b5035919050565b60ff8116811461520457600080fd5b6000806000806080858703121561561557600080fd5b8435615620816151e2565b93506020850135615630816155f0565b93969395505050506040820135916060013590565b60006020828403121561565757600080fd5b813567ffffffffffffffff81111561566e57600080fd5b61567a848285016153c3565b949350505050565b60006020828403121561569457600080fd5b61296c82615207565b6000806000606084860312156156b257600080fd5b83356156bd816151e2565b925060208401356156cd816151e2565b915060408401356156dd816151e2565b809150509250925092565b600080600080600060a0868803121561570057600080fd5b853561570b816151e2565b94506020860135935061572060408701615207565b9250606086013561573081615224565b9150608086013567ffffffffffffffff81111561574c57600080fd5b615758888289016152b0565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157a7576157a7615765565b500190565b6000602082840312156157be57600080fd5b5051919050565b6000602082840312156157d757600080fd5b815161296c816151e2565b80516fffffffffffffffffffffffffffffffff8116811461521f57600080fd5b60006060828403121561581457600080fd5b6040516060810181811067ffffffffffffffff8211171561583757615837615232565b6040528251815261584a602084016157e2565b602082015261585b604084016157e2565b60408201529392505050565b60006080828403121561587957600080fd5b6040516080810181811067ffffffffffffffff8211171561589c5761589c615232565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e8576158e8615232565b8360051b60206158f9818301615261565b86815291850191818101903684111561591157600080fd5b865b848110156159455780358681111561592b5760008081fd5b61593736828b016152b0565b845250918301918301615913565b50979650505050505050565b60006020828403121561596357600080fd5b815161296c81615224565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c281604985016020870161554e565b919091016049019695505050505050565b6000828210156159e5576159e5615765565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1157615a11615765565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3d57615a3d615765565b01949350505050565b60008060408385031215615a5957600080fd5b8251615a64816151e2565b6020840151909250615a75816155f0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abe57615abe615a80565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1257615b12615765565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5157615b51615765565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8557615b85615765565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcc57615bcc615765565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0757615c07615765565b60008712925087820587128484161615615c2357615c23615765565b87850587128184161615615c3957615c39615765565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8157615c81615765565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb557615cb5615765565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf357615cf3615765565b500290565b600082615d0757615d07615a80565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5760c083018461557a565b98975050505050505050565b805163ffffffff8116811461521f57600080fd5b600060c08284031215615d8957600080fd5b60405160c0810181811067ffffffffffffffff82111715615dac57615dac615232565b604052615db883615d63565b81526020830151615dc8816155f0565b60208201526040830151615ddb816155f0565b6040820152615dec60608401615d63565b6060820152615dfd60808401615d63565b6080820152615e0e60a084016157e2565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4b57615e4b615765565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9457615e94615a80565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebd57615ebd615765565b90039392505050565b60008251615ed881846020870161554e565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3340,7 +3340,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3348,7 +3348,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3356,7 +3356,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3364,7 +3364,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3372,7 +3372,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3380,7 +3380,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3388,7 +3388,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3396,7 +3396,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3404,7 +3404,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3412,7 +3412,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3420,7 +3420,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3428,7 +3428,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3436,7 +3436,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3444,7 +3444,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3452,7 +3452,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3460,7 +3460,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3468,7 +3468,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3476,7 +3476,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": true, "newValue": "0x000000000000000100000000000000000000000000000000000000003b9aca00", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3484,7 +3484,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3492,7 +3492,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3564,7 +3564,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3578,7 +3578,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3590,7 +3590,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3604,7 +3604,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3616,7 +3616,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3630,7 +3630,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3642,7 +3642,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3656,7 +3656,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -11095,7 +11095,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b05100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11121,7 +11121,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b05100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -11187,7 +11187,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b05100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11221,7 +11221,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef286000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b05100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef28600000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11240,7 +11240,7 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": true, - "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -11250,7 +11250,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11444,8 +11444,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", - "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11454,7 +11454,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11530,8 +11530,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", - "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11540,7 +11540,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11582,8 +11582,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", - "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11592,7 +11592,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11634,8 +11634,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", - "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11644,7 +11644,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11738,8 +11738,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", - "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11748,7 +11748,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11842,8 +11842,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", - "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11852,7 +11852,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11946,8 +11946,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", - "previousValue": "0x000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051", + "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11956,7 +11956,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051", + "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", "chainInfo": { "chainId": 31337, "forkId": 0 diff --git a/packages/contracts-bedrock/src/L1/OptimismPortal.sol b/packages/contracts-bedrock/src/L1/OptimismPortal.sol index 072b81d4237..14c15656ef4 100644 --- a/packages/contracts-bedrock/src/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/src/L1/OptimismPortal.sol @@ -556,6 +556,7 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { if (msg.sender != address(systemConfig)) revert Unauthorized(); // Set L2 deposit gas as used without paying burning gas. Ensures that deposits cannot use too much L2 gas. + // This value must be large enough to cover the cost of calling `L1Block.setGasPayingToken`. useGas(80000); // Emit the special deposit transaction directly that sets the gas paying diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index b27f7b0b90e..eb3d3dd0acd 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -21,7 +21,7 @@ contract DeploymentSummary is DeploymentSummaryCode { address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; - address internal constant optimismPortalAddress = 0xDc7Ac9954C3e3E1f51f5A53f783A1E6CB845B051; + address internal constant optimismPortalAddress = 0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; @@ -437,7 +437,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"000000000000000000000000000000000000000000000000000000000000000a"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"000000000000000000000000dc7ac9954c3e3e1f51f5a53f783a1e6cb845b051"; + value = hex"00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index 09ee8938acb..cc1a2f3abcf 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -35,7 +35,7 @@ contract DeploymentSummaryCode { bytes internal constant l1ERC721BridgeProxyCode = hex"60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a"; bytes internal constant optimismPortalCode = - hex"6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533f565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc610870565b34801561025957600080fd5b50610188610268366004615473565b610908565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c5565b3480156102cf57600080fd5b506102d8610eb5565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d8565b610f48565b34801561031457600080fd5b50610188610323366004615600565b611003565b34801561033457600080fd5b50610188610343366004615646565b6111c5565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d8565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615683565b611c47565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c60565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569e565b611cba565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d8565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e9565b8260005a90506000610599611f24565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc1565b50610625828261216d565b50505050505050565b8260005a9050600061063e611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa15801561071d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107419190615766565b905061076573ffffffffffffffffffffffffffffffffffffffff831633308c61243a565b61076f89826157ae565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fd9190615766565b14610834576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b88603d600082825461084691906157ae565b9091555061085a90508a8a8a8a8a8a611fc1565b5050610866828261216d565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090391906157c6565b905090565b610910610eb5565b15610947576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109b0576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a449190615803565b519050610a5e610a5936869003860186615868565b612516565b8114610af1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afc87612572565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c125750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0e9190615803565b5114155b610c9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae8565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d679101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5d888a6158ce565b8a604001356125a2565b610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae8565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615952565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffd9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe29190615803565b602001516fffffffffffffffffffffffffffffffff166125c6565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611054576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110606201388061266c565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117d9695949392910161596f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b5916155c5565b60405180910390a450505050565b565b6111cd610eb5565b15611204576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611257576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126282612572565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae8565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190615766565b81602001516fffffffffffffffffffffffffffffffff1610156114a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae8565b6114c881602001516fffffffffffffffffffffffffffffffff166125c6565b61157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190615803565b82518151919250146116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae8565b6116fe81602001516fffffffffffffffffffffffffffffffff166125c6565b6117b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae8565b60008381526033602052604090205460ff161561184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae8565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118da611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193d576119368660400151876080015188606001518960a001516126c8565b9150611b90565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a6576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b67578560600151603d60008282546119c691906159d4565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190615766565b9050611a91876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127269092919063ffffffff16565b6060870151611aa090826159d4565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2e9190615766565b14611b65576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8b576119368660400151876080015160008960a001516126c8565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf290851515815260200190565b60405180910390a281158015611c085750326001145b15611c3f576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c548260106159eb565b610ffd90615208615a1b565b600080611c6b611f24565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb2574791505090565b5050603d5490565b600054610100900460ff1615808015611cda5750600054600160ff909116105b80611cf45750303b158015611cf4575060005460ff166001145b611d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611dde57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9757603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9f612781565b8015611f0257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb89190615a47565b90939092509050565b818015611fe3575073ffffffffffffffffffffffffffffffffffffffff861615155b1561201a576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120248151611c47565b67ffffffffffffffff168367ffffffffffffffff161015612071576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120af576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120d0575033731111000000000000000000000000000000001111015b600086868686866040516020016120eb95949392919061596f565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215b91906155c5565b60405180910390a45050505050505050565b6001546000906121a3907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d4565b905060006121af612894565b90506000816020015160ff16826000015163ffffffff166121d09190615ab0565b9050821561230757600154600090612207908390700100000000000000000000000000000000900467ffffffffffffffff16615b18565b90506000836040015160ff168361221e9190615b8c565b60015461223e9084906fffffffffffffffffffffffffffffffff16615b8c565b6122489190615ab0565b600154909150600090612299906122729084906fffffffffffffffffffffffffffffffff16615c48565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612955565b905060018611156122c8576122c561227282876040015160ff1660018a6122c091906159d4565b612974565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805486919060109061233a908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c7576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f3906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbc565b9050600061240548633b9aca006129c9565b61240f9083615cf9565b905060005a61241e90886159d4565b9050808211156108665761086661243582846159d4565b6129e0565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f029085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a09565b60008160000151826020015183604001518460600151604051602001612555949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612555979096959101615d0d565b6000806125ae86612b15565b90506125bc81868686612b47565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612636573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265a9190615766565b61266490836157ae565b421192915050565b6001805482919060109061269f908490700100000000000000000000000000000000900467ffffffffffffffff16615a1b565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d8866000612b77565b90508061270e576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277c9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612494565b505050565b600054610100900460ff16612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae8565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c35760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109039190615d78565b600061296a6129648585612b95565b83612ba5565b90505b9392505050565b6000670de0b6b3a76400006129b561298c8583615ab0565b61299e90670de0b6b3a7640000615b18565b6129b085670de0b6b3a7640000615b8c565b612bb4565b6129bf9086615b8c565b61296a9190615ab0565b6000818310156129d9578161296d565b5090919050565b6000805a90505b825a6129f390836159d4565b101561277c57612a0282615e1b565b91506129e7565b6000612a6b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be59092919063ffffffff16565b80519091501561277c5780806020019051810190612a899190615952565b61277c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae8565b60608180519060200120604051602001612b3191815260200190565b6040516020818303038152906040529050919050565b6000612b6e84612b58878686612bf4565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d9578161296d565b60008183126129d9578161296d565b600061296d670de0b6b3a764000083612bcc86613672565b612bd69190615b8c565b612be09190615ab0565b6138b6565b606061296a8484600085613af5565b60606000845111612c61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae8565b6000612c6c84613c8b565b90506000612c7986613d77565b9050600084604051602001612c9091815260200190565b60405160208183030381529060405290506000805b84518110156135e9576000858281518110612cc257612cc2615e53565b602002602001015190508451831115612d5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae8565b82600003612e165780518051602091820120604051612dab92612d8592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae8565b612f6d565b805151602011612ecc5780518051602091820120604051612e4092612d8592910190815260200190565b612e11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae8565b805184516020808701919091208251919092012014612f6d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae8565b612f79601060016157ae565b8160200151510361315557845183036130ed57612fb38160200151601081518110612fa657612fa6615e53565b6020026020010151613dda565b96506000875111613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae8565b6001865161305491906159d4565b82146130e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae8565b50505050505061296d565b600085848151811061310157613101615e53565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312c5761312c615e53565b6020026020010151905061313f81613f3a565b955061314c6001866157ae565b945050506135d6565b60028160200151510361354e57600061316d82613f5f565b905060008160008151811061318457613184615e53565b016020015160f81c9050600061319b600283615e82565b6131a6906002615ea4565b905060006131b7848360ff16613f83565b905060006131c58a89613f83565b905060006131d38383613fb9565b905080835114613265576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae8565b60ff85166002148061327a575060ff85166003145b15613469578082511461330f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae8565b6133298760200151600181518110612fa657612fa6615e53565b9c5060008d51116133bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae8565b60018c516133ca91906159d4565b8814613458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae8565b50505050505050505050505061296d565b60ff8516158061347c575060ff85166001145b156134bb576134a8876020015160018151811061349b5761349b615e53565b6020026020010151613f3a565b99506134b4818a6157ae565b9850613543565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae8565b5050505050506135d6565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae8565b50806135e181615e1b565b915050612ca5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae8565b60008082136136dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b600060606136ea8461406d565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e757506000919050565b680755bf798b4a1bf1e58212613959576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae8565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b87576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae8565b73ffffffffffffffffffffffffffffffffffffffff85163b613c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae8565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2e9190615ec7565b60006040518083038185875af1925050503d8060008114613c6b576040519150601f19603f3d011682016040523d82523d6000602084013e613c70565b606091505b5091509150613c80828286614143565b979650505050505050565b80516060908067ffffffffffffffff811115613ca957613ca9615233565b604051908082528060200260200182016040528015613cee57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc75790505b50915060005b81811015613d70576040518060400160405280858381518110613d1957613d19615e53565b60200260200101518152602001613d48868481518110613d3b57613d3b615e53565b6020026020010151614196565b815250838281518110613d5d57613d5d615e53565b6020908102919091010152600101613cf4565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dcf578060011b82018184015160001a8060041c8253600f811660018301535050600101613da1565b509295945050505050565b60606000806000613dea856141a9565b919450925090506000816001811115613e0557613e05615ee3565b14613e92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae8565b613e9c82846157ae565b855114613f2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae8565b612b6e85602001518484614c16565b60606020826000015110613f5657613f5182613dda565b610ffd565b610ffd82614caa565b6060610ffd613f7e8360200151600081518110612fa657612fa6615e53565b613d77565b606082518210613fa25750604080516020810190915260008152610ffd565b61296d8383848651613fb491906159d4565b614cc0565b6000808251845110613fcc578251613fcf565b83515b90505b80821080156140565750828281518110613fee57613fee615e53565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402d5761402d615e53565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406657816001019150613fd2565b5092915050565b60008082116140d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae8565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415257508161296d565b8251156141625782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae891906155c5565b6060610ffd6141a483614e98565b614f81565b600080600080846000015111614267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b6020840151805160001a607f811161428c576000600160009450945094505050614c0f565b60b7811161449a5760006142a16080836159d4565b90508087600001511161435c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae8565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d557507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae8565b5060019550935060009250614c0f915050565b60bf81116147e85760006144af60b7836159d4565b90508087600001511161456a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c6037811161470c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae8565b61471681846157ae565b8951116147cb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae8565b6147d68360016157ae565b9750955060009450614c0f9350505050565b60f781116148c95760006147fd60c0836159d4565b9050808760000151116148b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b600195509350849250614c0f915050565b60006148d660f7836159d4565b905080876000015111614991576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae8565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae8565b600184015160088302610100031c60378111614b33576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae8565b614b3d81846157ae565b895111614bf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae8565b614bfd8360016157ae565b9750955060019450614c0f9350505050565b9193909250565b60608167ffffffffffffffff811115614c3157614c31615233565b6040519080825280601f01601f191660200182016040528015614c5b576020820181803683370190505b509050811561296d576000614c7084866157ae565b90506020820160005b84811015614c91578281015182820152602001614c79565b84811115614ca0576000858301525b5050509392505050565b6060610ffd826020015160008460000151614c16565b60608182601f011015614d2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b828284011015614d9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae8565b81830184511015614e08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae8565b606082158015614e275760405191506000825260208201604052614e8f565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e60578051835260209283019201614e48565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f63576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae8565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f91856141a9565b919450925090506001816001811115614fac57614fac615ee3565b14615039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae8565b845161504583856157ae565b146150d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae8565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e95790505093506000835b86518110156151d75760008061515c6040518060400160405280858c6000015161514091906159d4565b8152602001858c6020015161515591906157ae565b90526141a9565b50915091506040518060400160405280838361517891906157ae565b8152602001848b6020015161518d91906157ae565b8152508885815181106151a2576151a2615e53565b60209081029190910101526151b86001856157ae565b93506151c481836157ae565b6151ce90846157ae565b92505050615116565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520557600080fd5b50565b803567ffffffffffffffff8116811461522057600080fd5b919050565b801515811461520557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a9576152a9615233565b604052919050565b600082601f8301126152c257600080fd5b813567ffffffffffffffff8111156152dc576152dc615233565b61530d60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615262565b81815284602083860101111561532257600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535857600080fd5b8635615363816151e3565b9550602087013594506040870135935061537f60608801615208565b9250608087013561538f81615225565b915060a087013567ffffffffffffffff8111156153ab57600080fd5b6153b789828a016152b1565b9150509295509295509295565b600060c082840312156153d657600080fd5b60405160c0810167ffffffffffffffff82821081831117156153fa576153fa615233565b816040528293508435835260208501359150615415826151e3565b8160208401526040850135915061542b826151e3565b816040840152606085013560608401526080850135608084015260a085013591508082111561545957600080fd5b50615466858286016152b1565b60a0830152505092915050565b600080600080600085870360e081121561548c57600080fd5b863567ffffffffffffffff808211156154a457600080fd5b6154b08a838b016153c4565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e957600080fd5b60408901955060c089013592508083111561550357600080fd5b828901925089601f84011261551757600080fd5b823591508082111561552857600080fd5b508860208260051b840101111561553e57600080fd5b959894975092955050506020019190565b60005b8381101561556a578181015183820152602001615552565b83811115611f025750506000910152565b6000815180845261559381602086016020860161554f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296d602083018461557b565b6000602082840312156155ea57600080fd5b5035919050565b60ff8116811461520557600080fd5b6000806000806080858703121561561657600080fd5b8435615621816151e3565b93506020850135615631816155f1565b93969395505050506040820135916060013590565b60006020828403121561565857600080fd5b813567ffffffffffffffff81111561566f57600080fd5b61567b848285016153c4565b949350505050565b60006020828403121561569557600080fd5b61296d82615208565b6000806000606084860312156156b357600080fd5b83356156be816151e3565b925060208401356156ce816151e3565b915060408401356156de816151e3565b809150509250925092565b600080600080600060a0868803121561570157600080fd5b853561570c816151e3565b94506020860135935061572160408701615208565b9250606086013561573181615225565b9150608086013567ffffffffffffffff81111561574d57600080fd5b615759888289016152b1565b9150509295509295909350565b60006020828403121561577857600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157c1576157c161577f565b500190565b6000602082840312156157d857600080fd5b815161296d816151e3565b80516fffffffffffffffffffffffffffffffff8116811461522057600080fd5b60006060828403121561581557600080fd5b6040516060810181811067ffffffffffffffff8211171561583857615838615233565b6040528251815261584b602084016157e3565b602082015261585c604084016157e3565b60408201529392505050565b60006080828403121561587a57600080fd5b6040516080810181811067ffffffffffffffff8211171561589d5761589d615233565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e9576158e9615233565b8360051b60206158fa818301615262565b86815291850191818101903684111561591257600080fd5b865b848110156159465780358681111561592c5760008081fd5b61593836828b016152b1565b845250918301918301615914565b50979650505050505050565b60006020828403121561596457600080fd5b815161296d81615225565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c381604985016020870161554f565b919091016049019695505050505050565b6000828210156159e6576159e661577f565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1257615a1261577f565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3e57615a3e61577f565b01949350505050565b60008060408385031215615a5a57600080fd5b8251615a65816151e3565b6020840151909250615a76816155f1565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abf57615abf615a81565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1357615b1361577f565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5257615b5261577f565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8657615b8661577f565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcd57615bcd61577f565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0857615c0861577f565b60008712925087820587128484161615615c2457615c2461577f565b87850587128184161615615c3a57615c3a61577f565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8257615c8261577f565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb657615cb661577f565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf457615cf461577f565b500290565b600082615d0857615d08615a81565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5860c083018461557b565b98975050505050505050565b805163ffffffff8116811461522057600080fd5b600060c08284031215615d8a57600080fd5b60405160c0810181811067ffffffffffffffff82111715615dad57615dad615233565b604052615db983615d64565b81526020830151615dc9816155f1565b60208201526040830151615ddc816155f1565b6040820152615ded60608401615d64565b6060820152615dfe60808401615d64565b6080820152615e0f60a084016157e3565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4c57615e4c61577f565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9557615e95615a81565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebe57615ebe61577f565b90039392505050565b60008251615ed981846020870161554f565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; + hex"6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533e565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615472565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c4565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d7565b610f47565b34801561031457600080fd5b506101886103233660046155ff565b611002565b34801561033457600080fd5b50610188610343366004615645565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d7565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615682565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569d565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d7565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e8565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c29190615794565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157ac565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b6107868982615794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157ac565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157c5565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615802565b519050610a5d610a5836869003860186615867565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615802565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158cd565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615951565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615802565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c9695949392910161596e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155c4565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157ac565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615802565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126c7565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d3565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157ac565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127259092919063ffffffff16565b6060870151611a9f90826159d3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157ac565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126c7565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159ea565b610ffc90615208615a1a565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612780565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a46565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea95949392919061596e565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155c4565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d3565b905060006121ae612893565b90506000816020015160ff16826000015163ffffffff166121cf9190615aaf565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b17565b90506000836040015160ff168361221d9190615b8b565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b8b565b6122479190615aaf565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c47565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612954565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d3565b612973565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbb565b9050600061240448633b9aca006129c8565b61240e9083615cf8565b905060005a61241d90886159d3565b9050808211156108655761086561243482846159d3565b6129df565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a08565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d0c565b6000806125ad86612b14565b90506125bb81868686612b46565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157ac565b6126639083615794565b421192915050565b6001805482919060109061269e908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d7866000612b76565b90508061270d576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff16612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d77565b60006129696129638585612b94565b83612ba4565b90505b9392505050565b6000670de0b6b3a76400006129b461298b8583615aaf565b61299d90670de0b6b3a7640000615b17565b6129af85670de0b6b3a7640000615b8b565b612bb3565b6129be9086615b8b565b6129699190615aaf565b6000818310156129d8578161296c565b5090919050565b6000805a90505b825a6129f290836159d3565b101561277b57612a0182615e1a565b91506129e6565b6000612a6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be49092919063ffffffff16565b80519091501561277b5780806020019051810190612a889190615951565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3091815260200190565b6040516020818303038152906040529050919050565b6000612b6d84612b57878686612bf3565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d8578161296c565b60008183126129d8578161296c565b600061296c670de0b6b3a764000083612bcb86613671565b612bd59190615b8b565b612bdf9190615aaf565b6138b5565b60606129698484600085613af4565b60606000845111612c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c6b84613c8a565b90506000612c7886613d76565b9050600084604051602001612c8f91815260200190565b60405160208183030381529060405290506000805b84518110156135e8576000858281518110612cc157612cc1615e52565b602002602001015190508451831115612d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e155780518051602091820120604051612daa92612d8492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f6c565b805151602011612ecb5780518051602091820120604051612e3f92612d8492910190815260200190565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7860106001615794565b8160200151510361315457845183036130ec57612fb28160200151601081518110612fa557612fa5615e52565b6020026020010151613dd9565b96506000875111613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305391906159d3565b82146130e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b50505050505061296c565b600085848151811061310057613100615e52565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312b5761312b615e52565b6020026020010151905061313e81613f39565b955061314b600186615794565b945050506135d5565b60028160200151510361354d57600061316c82613f5e565b905060008160008151811061318357613183615e52565b016020015160f81c9050600061319a600283615e81565b6131a5906002615ea3565b905060006131b6848360ff16613f82565b905060006131c48a89613f82565b905060006131d28383613fb8565b905080835114613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff851660021480613279575060ff85166003145b15613468578082511461330e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b6133288760200151600181518110612fa557612fa5615e52565b9c5060008d51116133bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133c991906159d3565b8814613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b50505050505050505050505061296c565b60ff8516158061347b575060ff85166001145b156134ba576134a7876020015160018151811061349a5761349a615e52565b6020026020010151613f39565b99506134b3818a615794565b9850613542565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135d5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e081615e1a565b915050612ca4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136e98461406c565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e657506000919050565b680755bf798b4a1bf1e58212613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2d9190615ec6565b60006040518083038185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b5091509150613c7f828286614142565b979650505050505050565b80516060908067ffffffffffffffff811115613ca857613ca8615232565b604051908082528060200260200182016040528015613ced57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc65790505b50915060005b81811015613d6f576040518060400160405280858381518110613d1857613d18615e52565b60200260200101518152602001613d47868481518110613d3a57613d3a615e52565b6020026020010151614195565b815250838281518110613d5c57613d5c615e52565b6020908102919091010152600101613cf3565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dce578060011b82018184015160001a8060041c8253600f811660018301535050600101613da0565b509295945050505050565b60606000806000613de9856141a8565b919450925090506000816001811115613e0457613e04615ee2565b14613e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613e9b8284615794565b855114613f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b6d85602001518484614c15565b60606020826000015110613f5557613f5082613dd9565b610ffc565b610ffc82614ca9565b6060610ffc613f7d8360200151600081518110612fa557612fa5615e52565b613d76565b606082518210613fa15750604080516020810190915260008152610ffc565b61296c8383848651613fb391906159d3565b614cbf565b6000808251845110613fcb578251613fce565b83515b90505b80821080156140555750828281518110613fed57613fed615e52565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402c5761402c615e52565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406557816001019150613fd1565b5092915050565b60008082116140d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415157508161296c565b8251156141615782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155c4565b6060610ffc6141a383614e97565b614f80565b600080600080846000015111614266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f811161428b576000600160009450945094505050614c0e565b60b781116144995760006142a06080836159d3565b90508087600001511161435b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d457507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c0e915050565b60bf81116147e75760006144ae60b7836159d3565b905080876000015111614569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c6037811161470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b6147158184615794565b8951116147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147d5836001615794565b9750955060009450614c0e9350505050565b60f781116148c85760006147fc60c0836159d3565b9050808760000151116148b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c0e915050565b60006148d560f7836159d3565b905080876000015111614990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b3c8184615794565b895111614bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614bfc836001615794565b9750955060019450614c0e9350505050565b9193909250565b60608167ffffffffffffffff811115614c3057614c30615232565b6040519080825280601f01601f191660200182016040528015614c5a576020820181803683370190505b509050811561296c576000614c6f8486615794565b90506020820160005b84811015614c90578281015182820152602001614c78565b84811115614c9f576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c15565b60608182601f011015614d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e265760405191506000825260208201604052614e8e565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e5f578051835260209283019201614e47565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f90856141a8565b919450925090506001816001811115614fab57614fab615ee2565b14615038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b84516150448385615794565b146150d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e85790505093506000835b86518110156151d65760008061515b6040518060400160405280858c6000015161513f91906159d3565b8152602001858c602001516151549190615794565b90526141a8565b5091509150604051806040016040528083836151779190615794565b8152602001848b6020015161518c9190615794565b8152508885815181106151a1576151a1615e52565b60209081029190910101526151b7600185615794565b93506151c38183615794565b6151cd9084615794565b92505050615115565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520457600080fd5b50565b803567ffffffffffffffff8116811461521f57600080fd5b919050565b801515811461520457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a8576152a8615232565b604052919050565b600082601f8301126152c157600080fd5b813567ffffffffffffffff8111156152db576152db615232565b61530c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615261565b81815284602083860101111561532157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535757600080fd5b8635615362816151e2565b9550602087013594506040870135935061537e60608801615207565b9250608087013561538e81615224565b915060a087013567ffffffffffffffff8111156153aa57600080fd5b6153b689828a016152b0565b9150509295509295509295565b600060c082840312156153d557600080fd5b60405160c0810167ffffffffffffffff82821081831117156153f9576153f9615232565b816040528293508435835260208501359150615414826151e2565b8160208401526040850135915061542a826151e2565b816040840152606085013560608401526080850135608084015260a085013591508082111561545857600080fd5b50615465858286016152b0565b60a0830152505092915050565b600080600080600085870360e081121561548b57600080fd5b863567ffffffffffffffff808211156154a357600080fd5b6154af8a838b016153c3565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e857600080fd5b60408901955060c089013592508083111561550257600080fd5b828901925089601f84011261551657600080fd5b823591508082111561552757600080fd5b508860208260051b840101111561553d57600080fd5b959894975092955050506020019190565b60005b83811015615569578181015183820152602001615551565b83811115611f015750506000910152565b6000815180845261559281602086016020860161554e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296c602083018461557a565b6000602082840312156155e957600080fd5b5035919050565b60ff8116811461520457600080fd5b6000806000806080858703121561561557600080fd5b8435615620816151e2565b93506020850135615630816155f0565b93969395505050506040820135916060013590565b60006020828403121561565757600080fd5b813567ffffffffffffffff81111561566e57600080fd5b61567a848285016153c3565b949350505050565b60006020828403121561569457600080fd5b61296c82615207565b6000806000606084860312156156b257600080fd5b83356156bd816151e2565b925060208401356156cd816151e2565b915060408401356156dd816151e2565b809150509250925092565b600080600080600060a0868803121561570057600080fd5b853561570b816151e2565b94506020860135935061572060408701615207565b9250606086013561573081615224565b9150608086013567ffffffffffffffff81111561574c57600080fd5b615758888289016152b0565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157a7576157a7615765565b500190565b6000602082840312156157be57600080fd5b5051919050565b6000602082840312156157d757600080fd5b815161296c816151e2565b80516fffffffffffffffffffffffffffffffff8116811461521f57600080fd5b60006060828403121561581457600080fd5b6040516060810181811067ffffffffffffffff8211171561583757615837615232565b6040528251815261584a602084016157e2565b602082015261585b604084016157e2565b60408201529392505050565b60006080828403121561587957600080fd5b6040516080810181811067ffffffffffffffff8211171561589c5761589c615232565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e8576158e8615232565b8360051b60206158f9818301615261565b86815291850191818101903684111561591157600080fd5b865b848110156159455780358681111561592b5760008081fd5b61593736828b016152b0565b845250918301918301615913565b50979650505050505050565b60006020828403121561596357600080fd5b815161296c81615224565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c281604985016020870161554e565b919091016049019695505050505050565b6000828210156159e5576159e5615765565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1157615a11615765565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3d57615a3d615765565b01949350505050565b60008060408385031215615a5957600080fd5b8251615a64816151e2565b6020840151909250615a75816155f0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abe57615abe615a80565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1257615b12615765565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5157615b51615765565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8557615b85615765565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcc57615bcc615765565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0757615c07615765565b60008712925087820587128484161615615c2357615c23615765565b87850587128184161615615c3957615c39615765565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8157615c81615765565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb557615cb5615765565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf357615cf3615765565b500290565b600082615d0757615d07615a80565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5760c083018461557a565b98975050505050505050565b805163ffffffff8116811461521f57600080fd5b600060c08284031215615d8957600080fd5b60405160c0810181811067ffffffffffffffff82111715615dac57615dac615232565b604052615db883615d63565b81526020830151615dc8816155f0565b60208201526040830151615ddb816155f0565b6040820152615dec60608401615d63565b6060820152615dfd60808401615d63565b6080820152615e0e60a084016157e2565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4b57615e4b615765565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9457615e94615a80565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebd57615ebd615765565b90039392505050565b60008251615ed881846020870161554e565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; bytes internal constant l1CrossDomainMessengerCode = hex"60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant l2OutputOracleCode = From 2dbef3122acae09e6c77bfe3478ef55253e36788 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Tue, 30 Apr 2024 20:35:48 -0600 Subject: [PATCH 30/45] lint: fix --- packages/contracts-bedrock/.gas-snapshot | 2 +- packages/contracts-bedrock/test/L1/OptimismPortal.t.sol | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 4d0e86be6df..bdff093f8a6 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -8,4 +8,4 @@ GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (g GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 92973) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 68431) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 68923) -GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 155523) \ No newline at end of file +GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 155567) \ No newline at end of file diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index b9bb8995711..c0290c2c768 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -488,11 +488,7 @@ contract OptimismPortal_Test is CommonTest { } function test_depositERC20Transaction_balanceOverflow_reverts() external { - vm.mockCall( - address(systemConfig), - abi.encodeWithSignature("gasPayingToken()"), - abi.encode(address(42), 18) - ); + vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(42), 18)); // The balance slot vm.store(address(optimismPortal), bytes32(uint256(61)), bytes32(type(uint256).max)); From d0243b637b2a6d2d7bc0b7065e7ace8137844cf7 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 1 May 2024 21:45:00 -0600 Subject: [PATCH 31/45] custom-gas-token: address review comments --- .../contracts-bedrock/src/L1/L1StandardBridge.sol | 1 - .../contracts-bedrock/src/L1/OptimismPortal.sol | 13 ++++++++----- .../contracts-bedrock/src/L1/ResourceMetering.sol | 9 +++------ packages/contracts-bedrock/src/L2/L1Block.sol | 1 - .../src/universal/CrossDomainMessenger.sol | 2 +- .../test/L1/L1CrossDomainMessenger.t.sol | 4 ++-- .../test/L1/L1StandardBridge.t.sol | 2 +- .../contracts-bedrock/test/L1/OptimismPortal.t.sol | 13 +++++-------- .../test/L2/L2StandardBridge.t.sol | 2 -- .../test/libraries/GasPayingToken.t.sol | 1 - .../contracts-bedrock/test/setup/CommonTest.sol | 2 ++ 11 files changed, 22 insertions(+), 28 deletions(-) diff --git a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol index a620a45a0f2..757c140c56e 100644 --- a/packages/contracts-bedrock/src/L1/L1StandardBridge.sol +++ b/packages/contracts-bedrock/src/L1/L1StandardBridge.sol @@ -6,7 +6,6 @@ import { StandardBridge } from "src/universal/StandardBridge.sol"; import { ISemver } from "src/universal/ISemver.sol"; import { CrossDomainMessenger } from "src/universal/CrossDomainMessenger.sol"; import { SuperchainConfig } from "src/L1/SuperchainConfig.sol"; -import { Constants } from "src/libraries/Constants.sol"; import { OptimismPortal } from "src/L1/OptimismPortal.sol"; import { SystemConfig } from "src/L1/SystemConfig.sol"; diff --git a/packages/contracts-bedrock/src/L1/OptimismPortal.sol b/packages/contracts-bedrock/src/L1/OptimismPortal.sol index 14c15656ef4..643c5cf2824 100644 --- a/packages/contracts-bedrock/src/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/src/L1/OptimismPortal.sol @@ -44,6 +44,9 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { /// @notice The L2 gas limit set when eth is deposited using the receive() function. uint64 internal constant RECEIVE_DEFAULT_GAS_LIMIT = 100_000; + /// @notice The L2 gas limit for system deposit transactions that are initiated from L1. + uint32 internal constant SYSTEM_DEPOSIT_GAS_LIMIT = 80_000; + /// @notice Address of the L2 account which initiated a withdrawal in this transaction. /// If the of this variable is the default L2 sender address, then we are NOT inside of /// a call to finalizeWithdrawalTransaction. @@ -557,7 +560,7 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { // Set L2 deposit gas as used without paying burning gas. Ensures that deposits cannot use too much L2 gas. // This value must be large enough to cover the cost of calling `L1Block.setGasPayingToken`. - useGas(80000); + useGas(SYSTEM_DEPOSIT_GAS_LIMIT); // Emit the special deposit transaction directly that sets the gas paying // token in the L1Block predeploy contract. @@ -566,10 +569,10 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { Predeploys.L1_BLOCK_ATTRIBUTES, DEPOSIT_VERSION, abi.encodePacked( - uint256(0), // mint - uint256(0), // value - uint64(80000), // gasLimit - false, // isCreation, + uint256(0), // mint + uint256(0), // value + uint64(SYSTEM_DEPOSIT_GAS_LIMIT), // gasLimit + false, // isCreation, abi.encodeCall(L1Block.setGasPayingToken, (_token, _decimals, _name, _symbol)) ) ); diff --git a/packages/contracts-bedrock/src/L1/ResourceMetering.sol b/packages/contracts-bedrock/src/L1/ResourceMetering.sol index ae6f2d851e0..feeabe14ee1 100644 --- a/packages/contracts-bedrock/src/L1/ResourceMetering.sol +++ b/packages/contracts-bedrock/src/L1/ResourceMetering.sol @@ -148,13 +148,10 @@ abstract contract ResourceMetering is Initializable { } /// @notice Adds an amount of L2 gas consumed to the prev bought gas params. This is meant to be used - /// when L2 system transactions are generated from L1. This function is overflow safe due to - /// the constraint of the max resource limit being much larger than `type(uint64).max`. - /// By skipping enforcement of the new sum being smaller than the max resource limit, - /// no frontrunning grief is possible. + /// when L2 system transactions are generated from L1. /// @param _amount Amount of the L2 gas resource requested. - function useGas(uint64 _amount) internal { - params.prevBoughtGas += _amount; + function useGas(uint32 _amount) internal { + params.prevBoughtGas += uint64(_amount); } /// @notice Virtual function that returns the resource config. diff --git a/packages/contracts-bedrock/src/L2/L1Block.sol b/packages/contracts-bedrock/src/L2/L1Block.sol index 50880fd7661..9b213d0313b 100644 --- a/packages/contracts-bedrock/src/L2/L1Block.sol +++ b/packages/contracts-bedrock/src/L2/L1Block.sol @@ -3,7 +3,6 @@ pragma solidity 0.8.15; import { ISemver } from "src/universal/ISemver.sol"; import { Constants } from "src/libraries/Constants.sol"; -import { Storage } from "src/libraries/Storage.sol"; import { GasPayingToken, IGasToken } from "src/libraries/GasPayingToken.sol"; /// @custom:proxied diff --git a/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol b/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol index f45fc978632..66c724d3eba 100644 --- a/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol +++ b/packages/contracts-bedrock/src/universal/CrossDomainMessenger.sol @@ -362,7 +362,7 @@ abstract contract CrossDomainMessenger is + RELAY_GAS_CHECK_BUFFER; } - /// @notice Returns the address of the custom gas token and the token's decimals. + /// @notice Returns the address of the gas token and the token's decimals. function gasPayingToken() internal view virtual returns (address, uint8); /// @notice Returns whether the chain uses a custom gas token or not. diff --git a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol index 634434dc085..3f585f79576 100644 --- a/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol +++ b/packages/contracts-bedrock/test/L1/L1CrossDomainMessenger.t.sol @@ -625,7 +625,7 @@ contract L1CrossDomainMessenger_Test is Bridge_Initializer { function test_sendMessage_customGasToken_noValue_succeeds() external { // Mock the gasPayingToken function to return a custom gas token vm.mockCall( - address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18)) ); // deposit transaction on the optimism portal should be called @@ -712,7 +712,7 @@ contract L1CrossDomainMessenger_Test is Bridge_Initializer { ); // the message hash is in the successfulMessages mapping - assert(l1CrossDomainMessenger.successfulMessages(hash)); + assertTrue(l1CrossDomainMessenger.successfulMessages(hash)); // it is not in the received messages mapping assertEq(l1CrossDomainMessenger.failedMessages(hash), false); } diff --git a/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol b/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol index f0c8e61bcd8..d01fb1c2604 100644 --- a/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L1/L1StandardBridge.t.sol @@ -195,7 +195,7 @@ contract L1StandardBridge_Receive_TestFail is Bridge_Initializer { function testFuzz_receive_customGasToken_reverts(uint256 _value) external { vm.prank(alice, alice); vm.mockCall( - address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2)) + address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18)) ); vm.deal(alice, _value); (bool success, bytes memory data) = address(l1StandardBridge).call{ value: _value }(hex""); diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index c0290c2c768..4636ec67de2 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -262,7 +262,6 @@ contract OptimismPortal_Test is CommonTest { function test_depositTransaction_largeData_reverts() external { uint256 size = 120_001; - // Call minimumGasLimit(0) before vm.expectRevert to ensure vm.expectRevert is for depositERC20Transaction uint64 gasLimit = optimismPortal.minimumGasLimit(uint64(size)); vm.expectRevert(LargeCalldata.selector); optimismPortal.depositTransaction({ @@ -472,7 +471,8 @@ contract OptimismPortal_Test is CommonTest { } /// @dev Tests that the gas paying token cannot be set by a non-system config. - function test_setGasPayingToken_notSystemConfig_fails() external { + function test_setGasPayingToken_notSystemConfig_fails(address _caller) external { + vm.prank(_caller); vm.expectRevert(Unauthorized.selector); optimismPortal.setGasPayingToken({ _token: address(0), _decimals: 0, _name: "", _symbol: "" }); } @@ -1323,8 +1323,7 @@ contract OptimismPortalWithMockERC20_Test is OptimismPortal_FinalizeWithdrawal_T function test_depositERC20Transaction_notEnoughAmount_reverts() external { // Mock the gas paying token to be the ERC20 token vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); - vm.expectRevert(); - + vm.expectRevert(stdError.arithmeticError); // Deposit the token into the portal optimismPortal.depositERC20Transaction(address(0), 1, 0, 0, false, ""); } @@ -1383,9 +1382,7 @@ contract OptimismPortalWithMockERC20_Test is OptimismPortal_FinalizeWithdrawal_T // Mock the gas paying token to be the ERC20 token vm.mockCall(address(systemConfig), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(token), 18)); - // Call minimumGasLimit(0) before vm.expectRevert to ensure vm.expectRevert is for depositERC20Transaction uint64 gasLimit = optimismPortal.minimumGasLimit(120_001); - vm.expectRevert(LargeCalldata.selector); // Deposit the token into the portal optimismPortal.depositERC20Transaction(address(0), 0, 0, gasLimit, false, data); @@ -1423,12 +1420,12 @@ contract OptimismPortalWithMockERC20_Test is OptimismPortal_FinalizeWithdrawal_T assertEq(optimismPortal.balance(), _defaultTx.value); - vm.expectEmit(true, true, true, true); + vm.expectEmit(address(optimismPortal)); emit WithdrawalProven(_withdrawalHash, alice, bob); optimismPortal.proveWithdrawalTransaction(_defaultTx, _proposedOutputIndex, _outputRootProof, _withdrawalProof); vm.warp(block.timestamp + l2OutputOracle.FINALIZATION_PERIOD_SECONDS() + 1); - vm.expectEmit(true, true, false, true); + vm.expectEmit(address(optimismPortal)); emit WithdrawalFinalized(_withdrawalHash, true); vm.expectCall(_defaultTx.target, 0, _defaultTx.data); diff --git a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol index 02bef2517c8..34d40e293a5 100644 --- a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol @@ -20,8 +20,6 @@ import { L2StandardBridge } from "src/L2/L2StandardBridge.sol"; import { Predeploys } from "src/libraries/Predeploys.sol"; import { StandardBridge } from "src/universal/StandardBridge.sol"; import { OptimismMintableERC20 } from "src/universal/OptimismMintableERC20.sol"; -import { Constants } from "src/libraries/Constants.sol"; -import { AddressAliasHelper } from "src/vendor/AddressAliasHelper.sol"; contract L2StandardBridge_Test is Bridge_Initializer { using stdStorage for StdStorage; diff --git a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol index caeb52ca87f..f6ad014db3a 100644 --- a/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol +++ b/packages/contracts-bedrock/test/libraries/GasPayingToken.t.sol @@ -50,7 +50,6 @@ contract GasPayingToken_Roundtrip_Test is Test { assertEq(_decimals, decimals); assertEq(LibString.fromSmallString(_name), GasPayingToken.getName()); - assertEq(LibString.fromSmallString(_symbol), GasPayingToken.getSymbol()); } diff --git a/packages/contracts-bedrock/test/setup/CommonTest.sol b/packages/contracts-bedrock/test/setup/CommonTest.sol index 25c8e1764d0..5e005392c96 100644 --- a/packages/contracts-bedrock/test/setup/CommonTest.sol +++ b/packages/contracts-bedrock/test/setup/CommonTest.sol @@ -5,6 +5,7 @@ import { Test } from "forge-std/Test.sol"; import { Setup } from "test/setup/Setup.sol"; import { Events } from "test/setup/Events.sol"; import { FFIInterface } from "test/setup/FFIInterface.sol"; +import { Constants } from "src/libraries/Constants.sol"; import "scripts/DeployConfig.s.sol"; /// @title CommonTest @@ -130,6 +131,7 @@ contract CommonTest is Test, Setup, Events { if (!(alice == address(0) && bob == address(0))) { revert("CommonTest: Cannot enable custom gas token after deployment. Consider overriding `setUp`."); } + require(_token != Constants.ETHER); customGasToken = _token; } From 973e1c6a9aba79b053f1f0280b018c0d5d74d25d Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 1 May 2024 22:00:05 -0600 Subject: [PATCH 32/45] snapshots: regenerate --- .../snapshots/state-diff/Kontrol-Deploy.json | 118 +++++++++--------- .../proofs/utils/DeploymentSummary.sol | 4 +- .../proofs/utils/DeploymentSummaryCode.sol | 2 +- 3 files changed, 62 insertions(+), 62 deletions(-) diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json index 247f91a1d86..173343eb6d6 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json @@ -3314,7 +3314,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001f071760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f1e806200029f6000396000f3fe6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533e565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615472565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c4565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d7565b610f47565b34801561031457600080fd5b506101886103233660046155ff565b611002565b34801561033457600080fd5b50610188610343366004615645565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d7565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615682565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569d565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d7565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e8565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c29190615794565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157ac565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b6107868982615794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157ac565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157c5565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615802565b519050610a5d610a5836869003860186615867565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615802565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158cd565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615951565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615802565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c9695949392910161596e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155c4565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157ac565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615802565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126c7565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d3565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157ac565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127259092919063ffffffff16565b6060870151611a9f90826159d3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157ac565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126c7565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159ea565b610ffc90615208615a1a565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612780565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a46565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea95949392919061596e565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155c4565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d3565b905060006121ae612893565b90506000816020015160ff16826000015163ffffffff166121cf9190615aaf565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b17565b90506000836040015160ff168361221d9190615b8b565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b8b565b6122479190615aaf565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c47565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612954565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d3565b612973565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbb565b9050600061240448633b9aca006129c8565b61240e9083615cf8565b905060005a61241d90886159d3565b9050808211156108655761086561243482846159d3565b6129df565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a08565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d0c565b6000806125ad86612b14565b90506125bb81868686612b46565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157ac565b6126639083615794565b421192915050565b6001805482919060109061269e908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d7866000612b76565b90508061270d576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff16612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d77565b60006129696129638585612b94565b83612ba4565b90505b9392505050565b6000670de0b6b3a76400006129b461298b8583615aaf565b61299d90670de0b6b3a7640000615b17565b6129af85670de0b6b3a7640000615b8b565b612bb3565b6129be9086615b8b565b6129699190615aaf565b6000818310156129d8578161296c565b5090919050565b6000805a90505b825a6129f290836159d3565b101561277b57612a0182615e1a565b91506129e6565b6000612a6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be49092919063ffffffff16565b80519091501561277b5780806020019051810190612a889190615951565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3091815260200190565b6040516020818303038152906040529050919050565b6000612b6d84612b57878686612bf3565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d8578161296c565b60008183126129d8578161296c565b600061296c670de0b6b3a764000083612bcb86613671565b612bd59190615b8b565b612bdf9190615aaf565b6138b5565b60606129698484600085613af4565b60606000845111612c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c6b84613c8a565b90506000612c7886613d76565b9050600084604051602001612c8f91815260200190565b60405160208183030381529060405290506000805b84518110156135e8576000858281518110612cc157612cc1615e52565b602002602001015190508451831115612d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e155780518051602091820120604051612daa92612d8492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f6c565b805151602011612ecb5780518051602091820120604051612e3f92612d8492910190815260200190565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7860106001615794565b8160200151510361315457845183036130ec57612fb28160200151601081518110612fa557612fa5615e52565b6020026020010151613dd9565b96506000875111613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305391906159d3565b82146130e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b50505050505061296c565b600085848151811061310057613100615e52565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312b5761312b615e52565b6020026020010151905061313e81613f39565b955061314b600186615794565b945050506135d5565b60028160200151510361354d57600061316c82613f5e565b905060008160008151811061318357613183615e52565b016020015160f81c9050600061319a600283615e81565b6131a5906002615ea3565b905060006131b6848360ff16613f82565b905060006131c48a89613f82565b905060006131d28383613fb8565b905080835114613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff851660021480613279575060ff85166003145b15613468578082511461330e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b6133288760200151600181518110612fa557612fa5615e52565b9c5060008d51116133bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133c991906159d3565b8814613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b50505050505050505050505061296c565b60ff8516158061347b575060ff85166001145b156134ba576134a7876020015160018151811061349a5761349a615e52565b6020026020010151613f39565b99506134b3818a615794565b9850613542565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135d5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e081615e1a565b915050612ca4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136e98461406c565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e657506000919050565b680755bf798b4a1bf1e58212613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2d9190615ec6565b60006040518083038185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b5091509150613c7f828286614142565b979650505050505050565b80516060908067ffffffffffffffff811115613ca857613ca8615232565b604051908082528060200260200182016040528015613ced57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc65790505b50915060005b81811015613d6f576040518060400160405280858381518110613d1857613d18615e52565b60200260200101518152602001613d47868481518110613d3a57613d3a615e52565b6020026020010151614195565b815250838281518110613d5c57613d5c615e52565b6020908102919091010152600101613cf3565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dce578060011b82018184015160001a8060041c8253600f811660018301535050600101613da0565b509295945050505050565b60606000806000613de9856141a8565b919450925090506000816001811115613e0457613e04615ee2565b14613e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613e9b8284615794565b855114613f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b6d85602001518484614c15565b60606020826000015110613f5557613f5082613dd9565b610ffc565b610ffc82614ca9565b6060610ffc613f7d8360200151600081518110612fa557612fa5615e52565b613d76565b606082518210613fa15750604080516020810190915260008152610ffc565b61296c8383848651613fb391906159d3565b614cbf565b6000808251845110613fcb578251613fce565b83515b90505b80821080156140555750828281518110613fed57613fed615e52565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402c5761402c615e52565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406557816001019150613fd1565b5092915050565b60008082116140d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415157508161296c565b8251156141615782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155c4565b6060610ffc6141a383614e97565b614f80565b600080600080846000015111614266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f811161428b576000600160009450945094505050614c0e565b60b781116144995760006142a06080836159d3565b90508087600001511161435b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d457507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c0e915050565b60bf81116147e75760006144ae60b7836159d3565b905080876000015111614569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c6037811161470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b6147158184615794565b8951116147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147d5836001615794565b9750955060009450614c0e9350505050565b60f781116148c85760006147fc60c0836159d3565b9050808760000151116148b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c0e915050565b60006148d560f7836159d3565b905080876000015111614990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b3c8184615794565b895111614bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614bfc836001615794565b9750955060019450614c0e9350505050565b9193909250565b60608167ffffffffffffffff811115614c3057614c30615232565b6040519080825280601f01601f191660200182016040528015614c5a576020820181803683370190505b509050811561296c576000614c6f8486615794565b90506020820160005b84811015614c90578281015182820152602001614c78565b84811115614c9f576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c15565b60608182601f011015614d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e265760405191506000825260208201604052614e8e565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e5f578051835260209283019201614e47565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f90856141a8565b919450925090506001816001811115614fab57614fab615ee2565b14615038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b84516150448385615794565b146150d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e85790505093506000835b86518110156151d65760008061515b6040518060400160405280858c6000015161513f91906159d3565b8152602001858c602001516151549190615794565b90526141a8565b5091509150604051806040016040528083836151779190615794565b8152602001848b6020015161518c9190615794565b8152508885815181106151a1576151a1615e52565b60209081029190910101526151b7600185615794565b93506151c38183615794565b6151cd9084615794565b92505050615115565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520457600080fd5b50565b803567ffffffffffffffff8116811461521f57600080fd5b919050565b801515811461520457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a8576152a8615232565b604052919050565b600082601f8301126152c157600080fd5b813567ffffffffffffffff8111156152db576152db615232565b61530c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615261565b81815284602083860101111561532157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535757600080fd5b8635615362816151e2565b9550602087013594506040870135935061537e60608801615207565b9250608087013561538e81615224565b915060a087013567ffffffffffffffff8111156153aa57600080fd5b6153b689828a016152b0565b9150509295509295509295565b600060c082840312156153d557600080fd5b60405160c0810167ffffffffffffffff82821081831117156153f9576153f9615232565b816040528293508435835260208501359150615414826151e2565b8160208401526040850135915061542a826151e2565b816040840152606085013560608401526080850135608084015260a085013591508082111561545857600080fd5b50615465858286016152b0565b60a0830152505092915050565b600080600080600085870360e081121561548b57600080fd5b863567ffffffffffffffff808211156154a357600080fd5b6154af8a838b016153c3565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e857600080fd5b60408901955060c089013592508083111561550257600080fd5b828901925089601f84011261551657600080fd5b823591508082111561552757600080fd5b508860208260051b840101111561553d57600080fd5b959894975092955050506020019190565b60005b83811015615569578181015183820152602001615551565b83811115611f015750506000910152565b6000815180845261559281602086016020860161554e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296c602083018461557a565b6000602082840312156155e957600080fd5b5035919050565b60ff8116811461520457600080fd5b6000806000806080858703121561561557600080fd5b8435615620816151e2565b93506020850135615630816155f0565b93969395505050506040820135916060013590565b60006020828403121561565757600080fd5b813567ffffffffffffffff81111561566e57600080fd5b61567a848285016153c3565b949350505050565b60006020828403121561569457600080fd5b61296c82615207565b6000806000606084860312156156b257600080fd5b83356156bd816151e2565b925060208401356156cd816151e2565b915060408401356156dd816151e2565b809150509250925092565b600080600080600060a0868803121561570057600080fd5b853561570b816151e2565b94506020860135935061572060408701615207565b9250606086013561573081615224565b9150608086013567ffffffffffffffff81111561574c57600080fd5b615758888289016152b0565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157a7576157a7615765565b500190565b6000602082840312156157be57600080fd5b5051919050565b6000602082840312156157d757600080fd5b815161296c816151e2565b80516fffffffffffffffffffffffffffffffff8116811461521f57600080fd5b60006060828403121561581457600080fd5b6040516060810181811067ffffffffffffffff8211171561583757615837615232565b6040528251815261584a602084016157e2565b602082015261585b604084016157e2565b60408201529392505050565b60006080828403121561587957600080fd5b6040516080810181811067ffffffffffffffff8211171561589c5761589c615232565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e8576158e8615232565b8360051b60206158f9818301615261565b86815291850191818101903684111561591157600080fd5b865b848110156159455780358681111561592b5760008081fd5b61593736828b016152b0565b845250918301918301615913565b50979650505050505050565b60006020828403121561596357600080fd5b815161296c81615224565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c281604985016020870161554e565b919091016049019695505050505050565b6000828210156159e5576159e5615765565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1157615a11615765565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3d57615a3d615765565b01949350505050565b60008060408385031215615a5957600080fd5b8251615a64816151e2565b6020840151909250615a75816155f0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abe57615abe615a80565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1257615b12615765565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5157615b51615765565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8557615b85615765565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcc57615bcc615765565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0757615c07615765565b60008712925087820587128484161615615c2357615c23615765565b87850587128184161615615c3957615c39615765565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8157615c81615765565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb557615cb5615765565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf357615cf3615765565b500290565b600082615d0757615d07615a80565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5760c083018461557a565b98975050505050505050565b805163ffffffff8116811461521f57600080fd5b600060c08284031215615d8957600080fd5b60405160c0810181811067ffffffffffffffff82111715615dac57615dac615232565b604052615db883615d63565b81526020830151615dc8816155f0565b60208201526040830151615ddb816155f0565b6040820152615dec60608401615d63565b6060820152615dfd60808401615d63565b6080820152615e0e60a084016157e2565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4b57615e4b615765565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9457615e94615a80565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebd57615ebd615765565b90039392505050565b60008251615ed881846020870161554e565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001f071760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f24806200029f6000396000f3fe6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa366004615344565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615478565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155ca565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155dd565b610f47565b34801561031457600080fd5b50610188610323366004615605565b611002565b34801561033457600080fd5b5061018861034336600461564b565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155dd565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615688565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b506101886104493660046156a3565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155dd565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156ee565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c2919061579a565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157b2565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b610786898261579a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157b2565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157cb565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615808565b519050610a5d610a583686900386018661586d565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615808565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158d3565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615957565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615808565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c96959493929101615974565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155ca565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157b2565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615808565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126cd565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d9565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157b2565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff1661272b9092919063ffffffff16565b6060870151611a9f90826159d9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157b2565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126cd565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159f0565b610ffc90615208615a20565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612786565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a4c565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea959493929190615974565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155ca565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d9565b905060006121ae612899565b90506000816020015160ff16826000015163ffffffff166121cf9190615ab5565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b1d565b90506000836040015160ff168361221d9190615b91565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b91565b6122479190615ab5565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c4d565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff1661295a565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d9565b612979565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a20565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cc1565b9050600061240448633b9aca006129ce565b61240e9083615cfe565b905060005a61241d90886159d9565b9050808211156108655761086561243482846159d9565b6129e5565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a0e565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d12565b6000806125ad86612b1a565b90506125bb81868686612b4c565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157b2565b612663908361579a565b421192915050565b6001805463ffffffff831691906010906126a4908490700100000000000000000000000000000000900467ffffffffffffffff16615a20565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126dd866000612b7c565b905080612713576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127819084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff1661281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612936573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d7d565b600061296f6129698585612b9a565b83612baa565b90505b9392505050565b6000670de0b6b3a76400006129ba6129918583615ab5565b6129a390670de0b6b3a7640000615b1d565b6129b585670de0b6b3a7640000615b91565b612bb9565b6129c49086615b91565b61296f9190615ab5565b6000818310156129de5781612972565b5090919050565b6000805a90505b825a6129f890836159d9565b101561278157612a0782615e20565b91506129ec565b6000612a70826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612bea9092919063ffffffff16565b8051909150156127815780806020019051810190612a8e9190615957565b612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3691815260200190565b6040516020818303038152906040529050919050565b6000612b7384612b5d878686612bf9565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129de5781612972565b60008183126129de5781612972565b6000612972670de0b6b3a764000083612bd186613677565b612bdb9190615b91565b612be59190615ab5565b6138bb565b606061296f8484600085613afa565b60606000845111612c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c7184613c90565b90506000612c7e86613d7c565b9050600084604051602001612c9591815260200190565b60405160208183030381529060405290506000805b84518110156135ee576000858281518110612cc757612cc7615e58565b602002602001015190508451831115612d62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e1b5780518051602091820120604051612db092612d8a92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f72565b805151602011612ed15780518051602091820120604051612e4592612d8a92910190815260200190565b612e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7e6010600161579a565b8160200151510361315a57845183036130f257612fb88160200151601081518110612fab57612fab615e58565b6020026020010151613ddf565b9650600087511161304b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305991906159d9565b82146130e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b505050505050612972565b600085848151811061310657613106615e58565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061313157613131615e58565b6020026020010151905061314481613f3f565b955061315160018661579a565b945050506135db565b60028160200151510361355357600061317282613f64565b905060008160008151811061318957613189615e58565b016020015160f81c905060006131a0600283615e87565b6131ab906002615ea9565b905060006131bc848360ff16613f88565b905060006131ca8a89613f88565b905060006131d88383613fbe565b90508083511461326a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff85166002148061327f575060ff85166003145b1561346e5780825114613314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b61332e8760200151600181518110612fab57612fab615e58565b9c5060008d51116133c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133cf91906159d9565b881461345d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b505050505050505050505050612972565b60ff85161580613481575060ff85166001145b156134c0576134ad87602001516001815181106134a0576134a0615e58565b6020026020010151613f3f565b99506134b9818a61579a565b9850613548565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135db565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e681615e20565b915050612caa565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136ef84614072565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138ec57506000919050565b680755bf798b4a1bf1e5821261395e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c339190615ecc565b60006040518083038185875af1925050503d8060008114613c70576040519150601f19603f3d011682016040523d82523d6000602084013e613c75565b606091505b5091509150613c85828286614148565b979650505050505050565b80516060908067ffffffffffffffff811115613cae57613cae615238565b604051908082528060200260200182016040528015613cf357816020015b6040805180820190915260608082526020820152815260200190600190039081613ccc5790505b50915060005b81811015613d75576040518060400160405280858381518110613d1e57613d1e615e58565b60200260200101518152602001613d4d868481518110613d4057613d40615e58565b602002602001015161419b565b815250838281518110613d6257613d62615e58565b6020908102919091010152600101613cf9565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dd4578060011b82018184015160001a8060041c8253600f811660018301535050600101613da6565b509295945050505050565b60606000806000613def856141ae565b919450925090506000816001811115613e0a57613e0a615ee8565b14613e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613ea1828461579a565b855114613f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b7385602001518484614c1b565b60606020826000015110613f5b57613f5682613ddf565b610ffc565b610ffc82614caf565b6060610ffc613f838360200151600081518110612fab57612fab615e58565b613d7c565b606082518210613fa75750604080516020810190915260008152610ffc565b6129728383848651613fb991906159d9565b614cc5565b6000808251845110613fd1578251613fd4565b83515b90505b808210801561405b5750828281518110613ff357613ff3615e58565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061403257614032615e58565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406b57816001019150613fd7565b5092915050565b60008082116140dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614157575081612972565b8251156141675782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155ca565b6060610ffc6141a983614e9d565b614f86565b60008060008084600001511161426c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f8111614291576000600160009450945094505050614c14565b60b7811161449f5760006142a66080836159d9565b905080876000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143da57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b61448c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c14915050565b60bf81116147ed5760006144b460b7836159d9565b90508087600001511161456f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361464d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b61471b818461579a565b8951116147d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147db83600161579a565b9750955060009450614c149350505050565b60f781116148ce57600061480260c0836159d9565b9050808760000151116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c14915050565b60006148db60f7836159d9565b905080876000015111614996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b42818461579a565b895111614bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614c0283600161579a565b9750955060019450614c149350505050565b9193909250565b60608167ffffffffffffffff811115614c3657614c36615238565b6040519080825280601f01601f191660200182016040528015614c60576020820181803683370190505b5090508115612972576000614c75848661579a565b90506020820160005b84811015614c96578281015182820152602001614c7e565b84811115614ca5576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c1b565b60608182601f011015614d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614da0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e2c5760405191506000825260208201604052614e94565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e65578051835260209283019201614e4d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f96856141ae565b919450925090506001816001811115614fb157614fb1615ee8565b1461503e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b845161504a838561579a565b146150d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150ee5790505093506000835b86518110156151dc576000806151616040518060400160405280858c6000015161514591906159d9565b8152602001858c6020015161515a919061579a565b90526141ae565b50915091506040518060400160405280838361517d919061579a565b8152602001848b60200151615192919061579a565b8152508885815181106151a7576151a7615e58565b60209081029190910101526151bd60018561579a565b93506151c9818361579a565b6151d3908461579a565b9250505061511b565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520a57600080fd5b50565b803567ffffffffffffffff8116811461522557600080fd5b919050565b801515811461520a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152ae576152ae615238565b604052919050565b600082601f8301126152c757600080fd5b813567ffffffffffffffff8111156152e1576152e1615238565b61531260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615267565b81815284602083860101111561532757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535d57600080fd5b8635615368816151e8565b955060208701359450604087013593506153846060880161520d565b925060808701356153948161522a565b915060a087013567ffffffffffffffff8111156153b057600080fd5b6153bc89828a016152b6565b9150509295509295509295565b600060c082840312156153db57600080fd5b60405160c0810167ffffffffffffffff82821081831117156153ff576153ff615238565b81604052829350843583526020850135915061541a826151e8565b81602084015260408501359150615430826151e8565b816040840152606085013560608401526080850135608084015260a085013591508082111561545e57600080fd5b5061546b858286016152b6565b60a0830152505092915050565b600080600080600085870360e081121561549157600080fd5b863567ffffffffffffffff808211156154a957600080fd5b6154b58a838b016153c9565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154ee57600080fd5b60408901955060c089013592508083111561550857600080fd5b828901925089601f84011261551c57600080fd5b823591508082111561552d57600080fd5b508860208260051b840101111561554357600080fd5b959894975092955050506020019190565b60005b8381101561556f578181015183820152602001615557565b83811115611f015750506000910152565b60008151808452615598816020860160208601615554565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129726020830184615580565b6000602082840312156155ef57600080fd5b5035919050565b60ff8116811461520a57600080fd5b6000806000806080858703121561561b57600080fd5b8435615626816151e8565b93506020850135615636816155f6565b93969395505050506040820135916060013590565b60006020828403121561565d57600080fd5b813567ffffffffffffffff81111561567457600080fd5b615680848285016153c9565b949350505050565b60006020828403121561569a57600080fd5b6129728261520d565b6000806000606084860312156156b857600080fd5b83356156c3816151e8565b925060208401356156d3816151e8565b915060408401356156e3816151e8565b809150509250925092565b600080600080600060a0868803121561570657600080fd5b8535615711816151e8565b9450602086013593506157266040870161520d565b925060608601356157368161522a565b9150608086013567ffffffffffffffff81111561575257600080fd5b61575e888289016152b6565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157ad576157ad61576b565b500190565b6000602082840312156157c457600080fd5b5051919050565b6000602082840312156157dd57600080fd5b8151612972816151e8565b80516fffffffffffffffffffffffffffffffff8116811461522557600080fd5b60006060828403121561581a57600080fd5b6040516060810181811067ffffffffffffffff8211171561583d5761583d615238565b60405282518152615850602084016157e8565b6020820152615861604084016157e8565b60408201529392505050565b60006080828403121561587f57600080fd5b6040516080810181811067ffffffffffffffff821117156158a2576158a2615238565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158ee576158ee615238565b8360051b60206158ff818301615267565b86815291850191818101903684111561591757600080fd5b865b8481101561594b578035868111156159315760008081fd5b61593d36828b016152b6565b845250918301918301615919565b50979650505050505050565b60006020828403121561596957600080fd5b81516129728161522a565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c8816049850160208701615554565b919091016049019695505050505050565b6000828210156159eb576159eb61576b565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1757615a1761576b565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a4357615a4361576b565b01949350505050565b60008060408385031215615a5f57600080fd5b8251615a6a816151e8565b6020840151909250615a7b816155f6565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615ac457615ac4615a86565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1857615b1861576b565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5757615b5761576b565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8b57615b8b61576b565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd257615bd261576b565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0d57615c0d61576b565b60008712925087820587128484161615615c2957615c2961576b565b87850587128184161615615c3f57615c3f61576b565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8757615c8761576b565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cbb57615cbb61576b565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf957615cf961576b565b500290565b600082615d0d57615d0d615a86565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5d60c0830184615580565b98975050505050505050565b805163ffffffff8116811461522557600080fd5b600060c08284031215615d8f57600080fd5b60405160c0810181811067ffffffffffffffff82111715615db257615db2615238565b604052615dbe83615d69565b81526020830151615dce816155f6565b60208201526040830151615de1816155f6565b6040820152615df260608401615d69565b6060820152615e0360808401615d69565b6080820152615e1460a084016157e8565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e5157615e5161576b565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9a57615e9a615a86565b8060ff84160691505092915050565b600060ff821660ff841680821015615ec357615ec361576b565b90039392505050565b60008251615ede818460208701615554565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -3326,13 +3326,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001f071760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f1e806200029f6000396000f3fe6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533e565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615472565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c4565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d7565b610f47565b34801561031457600080fd5b506101886103233660046155ff565b611002565b34801561033457600080fd5b50610188610343366004615645565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d7565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615682565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569d565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d7565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e8565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c29190615794565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157ac565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b6107868982615794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157ac565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157c5565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615802565b519050610a5d610a5836869003860186615867565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615802565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158cd565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615951565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615802565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c9695949392910161596e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155c4565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157ac565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615802565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126c7565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d3565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157ac565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127259092919063ffffffff16565b6060870151611a9f90826159d3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157ac565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126c7565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159ea565b610ffc90615208615a1a565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612780565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a46565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea95949392919061596e565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155c4565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d3565b905060006121ae612893565b90506000816020015160ff16826000015163ffffffff166121cf9190615aaf565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b17565b90506000836040015160ff168361221d9190615b8b565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b8b565b6122479190615aaf565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c47565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612954565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d3565b612973565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbb565b9050600061240448633b9aca006129c8565b61240e9083615cf8565b905060005a61241d90886159d3565b9050808211156108655761086561243482846159d3565b6129df565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a08565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d0c565b6000806125ad86612b14565b90506125bb81868686612b46565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157ac565b6126639083615794565b421192915050565b6001805482919060109061269e908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d7866000612b76565b90508061270d576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff16612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d77565b60006129696129638585612b94565b83612ba4565b90505b9392505050565b6000670de0b6b3a76400006129b461298b8583615aaf565b61299d90670de0b6b3a7640000615b17565b6129af85670de0b6b3a7640000615b8b565b612bb3565b6129be9086615b8b565b6129699190615aaf565b6000818310156129d8578161296c565b5090919050565b6000805a90505b825a6129f290836159d3565b101561277b57612a0182615e1a565b91506129e6565b6000612a6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be49092919063ffffffff16565b80519091501561277b5780806020019051810190612a889190615951565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3091815260200190565b6040516020818303038152906040529050919050565b6000612b6d84612b57878686612bf3565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d8578161296c565b60008183126129d8578161296c565b600061296c670de0b6b3a764000083612bcb86613671565b612bd59190615b8b565b612bdf9190615aaf565b6138b5565b60606129698484600085613af4565b60606000845111612c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c6b84613c8a565b90506000612c7886613d76565b9050600084604051602001612c8f91815260200190565b60405160208183030381529060405290506000805b84518110156135e8576000858281518110612cc157612cc1615e52565b602002602001015190508451831115612d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e155780518051602091820120604051612daa92612d8492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f6c565b805151602011612ecb5780518051602091820120604051612e3f92612d8492910190815260200190565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7860106001615794565b8160200151510361315457845183036130ec57612fb28160200151601081518110612fa557612fa5615e52565b6020026020010151613dd9565b96506000875111613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305391906159d3565b82146130e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b50505050505061296c565b600085848151811061310057613100615e52565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312b5761312b615e52565b6020026020010151905061313e81613f39565b955061314b600186615794565b945050506135d5565b60028160200151510361354d57600061316c82613f5e565b905060008160008151811061318357613183615e52565b016020015160f81c9050600061319a600283615e81565b6131a5906002615ea3565b905060006131b6848360ff16613f82565b905060006131c48a89613f82565b905060006131d28383613fb8565b905080835114613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff851660021480613279575060ff85166003145b15613468578082511461330e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b6133288760200151600181518110612fa557612fa5615e52565b9c5060008d51116133bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133c991906159d3565b8814613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b50505050505050505050505061296c565b60ff8516158061347b575060ff85166001145b156134ba576134a7876020015160018151811061349a5761349a615e52565b6020026020010151613f39565b99506134b3818a615794565b9850613542565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135d5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e081615e1a565b915050612ca4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136e98461406c565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e657506000919050565b680755bf798b4a1bf1e58212613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2d9190615ec6565b60006040518083038185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b5091509150613c7f828286614142565b979650505050505050565b80516060908067ffffffffffffffff811115613ca857613ca8615232565b604051908082528060200260200182016040528015613ced57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc65790505b50915060005b81811015613d6f576040518060400160405280858381518110613d1857613d18615e52565b60200260200101518152602001613d47868481518110613d3a57613d3a615e52565b6020026020010151614195565b815250838281518110613d5c57613d5c615e52565b6020908102919091010152600101613cf3565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dce578060011b82018184015160001a8060041c8253600f811660018301535050600101613da0565b509295945050505050565b60606000806000613de9856141a8565b919450925090506000816001811115613e0457613e04615ee2565b14613e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613e9b8284615794565b855114613f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b6d85602001518484614c15565b60606020826000015110613f5557613f5082613dd9565b610ffc565b610ffc82614ca9565b6060610ffc613f7d8360200151600081518110612fa557612fa5615e52565b613d76565b606082518210613fa15750604080516020810190915260008152610ffc565b61296c8383848651613fb391906159d3565b614cbf565b6000808251845110613fcb578251613fce565b83515b90505b80821080156140555750828281518110613fed57613fed615e52565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402c5761402c615e52565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406557816001019150613fd1565b5092915050565b60008082116140d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415157508161296c565b8251156141615782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155c4565b6060610ffc6141a383614e97565b614f80565b600080600080846000015111614266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f811161428b576000600160009450945094505050614c0e565b60b781116144995760006142a06080836159d3565b90508087600001511161435b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d457507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c0e915050565b60bf81116147e75760006144ae60b7836159d3565b905080876000015111614569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c6037811161470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b6147158184615794565b8951116147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147d5836001615794565b9750955060009450614c0e9350505050565b60f781116148c85760006147fc60c0836159d3565b9050808760000151116148b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c0e915050565b60006148d560f7836159d3565b905080876000015111614990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b3c8184615794565b895111614bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614bfc836001615794565b9750955060019450614c0e9350505050565b9193909250565b60608167ffffffffffffffff811115614c3057614c30615232565b6040519080825280601f01601f191660200182016040528015614c5a576020820181803683370190505b509050811561296c576000614c6f8486615794565b90506020820160005b84811015614c90578281015182820152602001614c78565b84811115614c9f576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c15565b60608182601f011015614d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e265760405191506000825260208201604052614e8e565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e5f578051835260209283019201614e47565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f90856141a8565b919450925090506001816001811115614fab57614fab615ee2565b14615038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b84516150448385615794565b146150d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e85790505093506000835b86518110156151d65760008061515b6040518060400160405280858c6000015161513f91906159d3565b8152602001858c602001516151549190615794565b90526141a8565b5091509150604051806040016040528083836151779190615794565b8152602001848b6020015161518c9190615794565b8152508885815181106151a1576151a1615e52565b60209081029190910101526151b7600185615794565b93506151c38183615794565b6151cd9084615794565b92505050615115565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520457600080fd5b50565b803567ffffffffffffffff8116811461521f57600080fd5b919050565b801515811461520457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a8576152a8615232565b604052919050565b600082601f8301126152c157600080fd5b813567ffffffffffffffff8111156152db576152db615232565b61530c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615261565b81815284602083860101111561532157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535757600080fd5b8635615362816151e2565b9550602087013594506040870135935061537e60608801615207565b9250608087013561538e81615224565b915060a087013567ffffffffffffffff8111156153aa57600080fd5b6153b689828a016152b0565b9150509295509295509295565b600060c082840312156153d557600080fd5b60405160c0810167ffffffffffffffff82821081831117156153f9576153f9615232565b816040528293508435835260208501359150615414826151e2565b8160208401526040850135915061542a826151e2565b816040840152606085013560608401526080850135608084015260a085013591508082111561545857600080fd5b50615465858286016152b0565b60a0830152505092915050565b600080600080600085870360e081121561548b57600080fd5b863567ffffffffffffffff808211156154a357600080fd5b6154af8a838b016153c3565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e857600080fd5b60408901955060c089013592508083111561550257600080fd5b828901925089601f84011261551657600080fd5b823591508082111561552757600080fd5b508860208260051b840101111561553d57600080fd5b959894975092955050506020019190565b60005b83811015615569578181015183820152602001615551565b83811115611f015750506000910152565b6000815180845261559281602086016020860161554e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296c602083018461557a565b6000602082840312156155e957600080fd5b5035919050565b60ff8116811461520457600080fd5b6000806000806080858703121561561557600080fd5b8435615620816151e2565b93506020850135615630816155f0565b93969395505050506040820135916060013590565b60006020828403121561565757600080fd5b813567ffffffffffffffff81111561566e57600080fd5b61567a848285016153c3565b949350505050565b60006020828403121561569457600080fd5b61296c82615207565b6000806000606084860312156156b257600080fd5b83356156bd816151e2565b925060208401356156cd816151e2565b915060408401356156dd816151e2565b809150509250925092565b600080600080600060a0868803121561570057600080fd5b853561570b816151e2565b94506020860135935061572060408701615207565b9250606086013561573081615224565b9150608086013567ffffffffffffffff81111561574c57600080fd5b615758888289016152b0565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157a7576157a7615765565b500190565b6000602082840312156157be57600080fd5b5051919050565b6000602082840312156157d757600080fd5b815161296c816151e2565b80516fffffffffffffffffffffffffffffffff8116811461521f57600080fd5b60006060828403121561581457600080fd5b6040516060810181811067ffffffffffffffff8211171561583757615837615232565b6040528251815261584a602084016157e2565b602082015261585b604084016157e2565b60408201529392505050565b60006080828403121561587957600080fd5b6040516080810181811067ffffffffffffffff8211171561589c5761589c615232565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e8576158e8615232565b8360051b60206158f9818301615261565b86815291850191818101903684111561591157600080fd5b865b848110156159455780358681111561592b5760008081fd5b61593736828b016152b0565b845250918301918301615913565b50979650505050505050565b60006020828403121561596357600080fd5b815161296c81615224565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c281604985016020870161554e565b919091016049019695505050505050565b6000828210156159e5576159e5615765565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1157615a11615765565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3d57615a3d615765565b01949350505050565b60008060408385031215615a5957600080fd5b8251615a64816151e2565b6020840151909250615a75816155f0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abe57615abe615a80565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1257615b12615765565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5157615b51615765565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8557615b85615765565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcc57615bcc615765565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0757615c07615765565b60008712925087820587128484161615615c2357615c23615765565b87850587128184161615615c3957615c39615765565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8157615c81615765565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb557615cb5615765565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf357615cf3615765565b500290565b600082615d0757615d07615a80565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5760c083018461557a565b98975050505050505050565b805163ffffffff8116811461521f57600080fd5b600060c08284031215615d8957600080fd5b60405160c0810181811067ffffffffffffffff82111715615dac57615dac615232565b604052615db883615d63565b81526020830151615dc8816155f0565b60208201526040830151615ddb816155f0565b6040820152615dec60608401615d63565b6060820152615dfd60808401615d63565b6080820152615e0e60a084016157e2565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4b57615e4b615765565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9457615e94615a80565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebd57615ebd615765565b90039392505050565b60008251615ed881846020870161554e565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533e565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615472565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c4565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d7565b610f47565b34801561031457600080fd5b506101886103233660046155ff565b611002565b34801561033457600080fd5b50610188610343366004615645565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d7565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615682565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569d565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d7565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e8565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c29190615794565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157ac565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b6107868982615794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157ac565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157c5565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615802565b519050610a5d610a5836869003860186615867565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615802565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158cd565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615951565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615802565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c9695949392910161596e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155c4565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157ac565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615802565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126c7565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d3565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157ac565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127259092919063ffffffff16565b6060870151611a9f90826159d3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157ac565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126c7565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159ea565b610ffc90615208615a1a565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612780565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a46565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea95949392919061596e565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155c4565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d3565b905060006121ae612893565b90506000816020015160ff16826000015163ffffffff166121cf9190615aaf565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b17565b90506000836040015160ff168361221d9190615b8b565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b8b565b6122479190615aaf565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c47565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612954565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d3565b612973565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbb565b9050600061240448633b9aca006129c8565b61240e9083615cf8565b905060005a61241d90886159d3565b9050808211156108655761086561243482846159d3565b6129df565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a08565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d0c565b6000806125ad86612b14565b90506125bb81868686612b46565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157ac565b6126639083615794565b421192915050565b6001805482919060109061269e908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d7866000612b76565b90508061270d576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff16612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d77565b60006129696129638585612b94565b83612ba4565b90505b9392505050565b6000670de0b6b3a76400006129b461298b8583615aaf565b61299d90670de0b6b3a7640000615b17565b6129af85670de0b6b3a7640000615b8b565b612bb3565b6129be9086615b8b565b6129699190615aaf565b6000818310156129d8578161296c565b5090919050565b6000805a90505b825a6129f290836159d3565b101561277b57612a0182615e1a565b91506129e6565b6000612a6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be49092919063ffffffff16565b80519091501561277b5780806020019051810190612a889190615951565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3091815260200190565b6040516020818303038152906040529050919050565b6000612b6d84612b57878686612bf3565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d8578161296c565b60008183126129d8578161296c565b600061296c670de0b6b3a764000083612bcb86613671565b612bd59190615b8b565b612bdf9190615aaf565b6138b5565b60606129698484600085613af4565b60606000845111612c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c6b84613c8a565b90506000612c7886613d76565b9050600084604051602001612c8f91815260200190565b60405160208183030381529060405290506000805b84518110156135e8576000858281518110612cc157612cc1615e52565b602002602001015190508451831115612d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e155780518051602091820120604051612daa92612d8492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f6c565b805151602011612ecb5780518051602091820120604051612e3f92612d8492910190815260200190565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7860106001615794565b8160200151510361315457845183036130ec57612fb28160200151601081518110612fa557612fa5615e52565b6020026020010151613dd9565b96506000875111613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305391906159d3565b82146130e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b50505050505061296c565b600085848151811061310057613100615e52565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312b5761312b615e52565b6020026020010151905061313e81613f39565b955061314b600186615794565b945050506135d5565b60028160200151510361354d57600061316c82613f5e565b905060008160008151811061318357613183615e52565b016020015160f81c9050600061319a600283615e81565b6131a5906002615ea3565b905060006131b6848360ff16613f82565b905060006131c48a89613f82565b905060006131d28383613fb8565b905080835114613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff851660021480613279575060ff85166003145b15613468578082511461330e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b6133288760200151600181518110612fa557612fa5615e52565b9c5060008d51116133bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133c991906159d3565b8814613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b50505050505050505050505061296c565b60ff8516158061347b575060ff85166001145b156134ba576134a7876020015160018151811061349a5761349a615e52565b6020026020010151613f39565b99506134b3818a615794565b9850613542565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135d5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e081615e1a565b915050612ca4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136e98461406c565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e657506000919050565b680755bf798b4a1bf1e58212613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2d9190615ec6565b60006040518083038185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b5091509150613c7f828286614142565b979650505050505050565b80516060908067ffffffffffffffff811115613ca857613ca8615232565b604051908082528060200260200182016040528015613ced57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc65790505b50915060005b81811015613d6f576040518060400160405280858381518110613d1857613d18615e52565b60200260200101518152602001613d47868481518110613d3a57613d3a615e52565b6020026020010151614195565b815250838281518110613d5c57613d5c615e52565b6020908102919091010152600101613cf3565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dce578060011b82018184015160001a8060041c8253600f811660018301535050600101613da0565b509295945050505050565b60606000806000613de9856141a8565b919450925090506000816001811115613e0457613e04615ee2565b14613e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613e9b8284615794565b855114613f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b6d85602001518484614c15565b60606020826000015110613f5557613f5082613dd9565b610ffc565b610ffc82614ca9565b6060610ffc613f7d8360200151600081518110612fa557612fa5615e52565b613d76565b606082518210613fa15750604080516020810190915260008152610ffc565b61296c8383848651613fb391906159d3565b614cbf565b6000808251845110613fcb578251613fce565b83515b90505b80821080156140555750828281518110613fed57613fed615e52565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402c5761402c615e52565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406557816001019150613fd1565b5092915050565b60008082116140d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415157508161296c565b8251156141615782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155c4565b6060610ffc6141a383614e97565b614f80565b600080600080846000015111614266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f811161428b576000600160009450945094505050614c0e565b60b781116144995760006142a06080836159d3565b90508087600001511161435b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d457507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c0e915050565b60bf81116147e75760006144ae60b7836159d3565b905080876000015111614569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c6037811161470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b6147158184615794565b8951116147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147d5836001615794565b9750955060009450614c0e9350505050565b60f781116148c85760006147fc60c0836159d3565b9050808760000151116148b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c0e915050565b60006148d560f7836159d3565b905080876000015111614990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b3c8184615794565b895111614bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614bfc836001615794565b9750955060019450614c0e9350505050565b9193909250565b60608167ffffffffffffffff811115614c3057614c30615232565b6040519080825280601f01601f191660200182016040528015614c5a576020820181803683370190505b509050811561296c576000614c6f8486615794565b90506020820160005b84811015614c90578281015182820152602001614c78565b84811115614c9f576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c15565b60608182601f011015614d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e265760405191506000825260208201604052614e8e565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e5f578051835260209283019201614e47565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f90856141a8565b919450925090506001816001811115614fab57614fab615ee2565b14615038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b84516150448385615794565b146150d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e85790505093506000835b86518110156151d65760008061515b6040518060400160405280858c6000015161513f91906159d3565b8152602001858c602001516151549190615794565b90526141a8565b5091509150604051806040016040528083836151779190615794565b8152602001848b6020015161518c9190615794565b8152508885815181106151a1576151a1615e52565b60209081029190910101526151b7600185615794565b93506151c38183615794565b6151cd9084615794565b92505050615115565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520457600080fd5b50565b803567ffffffffffffffff8116811461521f57600080fd5b919050565b801515811461520457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a8576152a8615232565b604052919050565b600082601f8301126152c157600080fd5b813567ffffffffffffffff8111156152db576152db615232565b61530c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615261565b81815284602083860101111561532157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535757600080fd5b8635615362816151e2565b9550602087013594506040870135935061537e60608801615207565b9250608087013561538e81615224565b915060a087013567ffffffffffffffff8111156153aa57600080fd5b6153b689828a016152b0565b9150509295509295509295565b600060c082840312156153d557600080fd5b60405160c0810167ffffffffffffffff82821081831117156153f9576153f9615232565b816040528293508435835260208501359150615414826151e2565b8160208401526040850135915061542a826151e2565b816040840152606085013560608401526080850135608084015260a085013591508082111561545857600080fd5b50615465858286016152b0565b60a0830152505092915050565b600080600080600085870360e081121561548b57600080fd5b863567ffffffffffffffff808211156154a357600080fd5b6154af8a838b016153c3565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e857600080fd5b60408901955060c089013592508083111561550257600080fd5b828901925089601f84011261551657600080fd5b823591508082111561552757600080fd5b508860208260051b840101111561553d57600080fd5b959894975092955050506020019190565b60005b83811015615569578181015183820152602001615551565b83811115611f015750506000910152565b6000815180845261559281602086016020860161554e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296c602083018461557a565b6000602082840312156155e957600080fd5b5035919050565b60ff8116811461520457600080fd5b6000806000806080858703121561561557600080fd5b8435615620816151e2565b93506020850135615630816155f0565b93969395505050506040820135916060013590565b60006020828403121561565757600080fd5b813567ffffffffffffffff81111561566e57600080fd5b61567a848285016153c3565b949350505050565b60006020828403121561569457600080fd5b61296c82615207565b6000806000606084860312156156b257600080fd5b83356156bd816151e2565b925060208401356156cd816151e2565b915060408401356156dd816151e2565b809150509250925092565b600080600080600060a0868803121561570057600080fd5b853561570b816151e2565b94506020860135935061572060408701615207565b9250606086013561573081615224565b9150608086013567ffffffffffffffff81111561574c57600080fd5b615758888289016152b0565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157a7576157a7615765565b500190565b6000602082840312156157be57600080fd5b5051919050565b6000602082840312156157d757600080fd5b815161296c816151e2565b80516fffffffffffffffffffffffffffffffff8116811461521f57600080fd5b60006060828403121561581457600080fd5b6040516060810181811067ffffffffffffffff8211171561583757615837615232565b6040528251815261584a602084016157e2565b602082015261585b604084016157e2565b60408201529392505050565b60006080828403121561587957600080fd5b6040516080810181811067ffffffffffffffff8211171561589c5761589c615232565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e8576158e8615232565b8360051b60206158f9818301615261565b86815291850191818101903684111561591157600080fd5b865b848110156159455780358681111561592b5760008081fd5b61593736828b016152b0565b845250918301918301615913565b50979650505050505050565b60006020828403121561596357600080fd5b815161296c81615224565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c281604985016020870161554e565b919091016049019695505050505050565b6000828210156159e5576159e5615765565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1157615a11615765565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3d57615a3d615765565b01949350505050565b60008060408385031215615a5957600080fd5b8251615a64816151e2565b6020840151909250615a75816155f0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abe57615abe615a80565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1257615b12615765565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5157615b51615765565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8557615b85615765565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcc57615bcc615765565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0757615c07615765565b60008712925087820587128484161615615c2357615c23615765565b87850587128184161615615c3957615c39615765565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8157615c81615765565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb557615cb5615765565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf357615cf3615765565b500290565b600082615d0757615d07615a80565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5760c083018461557a565b98975050505050505050565b805163ffffffff8116811461521f57600080fd5b600060c08284031215615d8957600080fd5b60405160c0810181811067ffffffffffffffff82111715615dac57615dac615232565b604052615db883615d63565b81526020830151615dc8816155f0565b60208201526040830151615ddb816155f0565b6040820152615dec60608401615d63565b6060820152615dfd60808401615d63565b6080820152615e0e60a084016157e2565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4b57615e4b615765565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9457615e94615a80565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebd57615ebd615765565b90039392505050565b60008251615ed881846020870161554e565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200028f565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001c160201b62001f071760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603680546001600160a01b03199081166001600160a01b03878116919091179092556037805490911685831617905560358054610100600160a81b03191661010085841602179055603254166200016a57603280546001600160a01b03191661dead1790555b62000174620001d0565b8015620001bb576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200023d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600154600160c01b90046001600160401b03166000036200028d5760408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b02176001555b565b615f24806200029f6000396000f3fe6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa366004615344565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615478565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155ca565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155dd565b610f47565b34801561031457600080fd5b50610188610323366004615605565b611002565b34801561033457600080fd5b5061018861034336600461564b565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155dd565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615688565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b506101886104493660046156a3565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155dd565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156ee565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c2919061579a565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157b2565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b610786898261579a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157b2565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157cb565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615808565b519050610a5d610a583686900386018661586d565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615808565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158d3565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615957565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615808565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c96959493929101615974565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155ca565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157b2565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615808565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126cd565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d9565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157b2565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff1661272b9092919063ffffffff16565b6060870151611a9f90826159d9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157b2565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126cd565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159f0565b610ffc90615208615a20565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612786565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a4c565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea959493929190615974565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155ca565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d9565b905060006121ae612899565b90506000816020015160ff16826000015163ffffffff166121cf9190615ab5565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b1d565b90506000836040015160ff168361221d9190615b91565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b91565b6122479190615ab5565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c4d565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff1661295a565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d9565b612979565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a20565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cc1565b9050600061240448633b9aca006129ce565b61240e9083615cfe565b905060005a61241d90886159d9565b9050808211156108655761086561243482846159d9565b6129e5565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a0e565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d12565b6000806125ad86612b1a565b90506125bb81868686612b4c565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157b2565b612663908361579a565b421192915050565b6001805463ffffffff831691906010906126a4908490700100000000000000000000000000000000900467ffffffffffffffff16615a20565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126dd866000612b7c565b905080612713576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127819084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff1661281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612936573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d7d565b600061296f6129698585612b9a565b83612baa565b90505b9392505050565b6000670de0b6b3a76400006129ba6129918583615ab5565b6129a390670de0b6b3a7640000615b1d565b6129b585670de0b6b3a7640000615b91565b612bb9565b6129c49086615b91565b61296f9190615ab5565b6000818310156129de5781612972565b5090919050565b6000805a90505b825a6129f890836159d9565b101561278157612a0782615e20565b91506129ec565b6000612a70826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612bea9092919063ffffffff16565b8051909150156127815780806020019051810190612a8e9190615957565b612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3691815260200190565b6040516020818303038152906040529050919050565b6000612b7384612b5d878686612bf9565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129de5781612972565b60008183126129de5781612972565b6000612972670de0b6b3a764000083612bd186613677565b612bdb9190615b91565b612be59190615ab5565b6138bb565b606061296f8484600085613afa565b60606000845111612c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c7184613c90565b90506000612c7e86613d7c565b9050600084604051602001612c9591815260200190565b60405160208183030381529060405290506000805b84518110156135ee576000858281518110612cc757612cc7615e58565b602002602001015190508451831115612d62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e1b5780518051602091820120604051612db092612d8a92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f72565b805151602011612ed15780518051602091820120604051612e4592612d8a92910190815260200190565b612e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7e6010600161579a565b8160200151510361315a57845183036130f257612fb88160200151601081518110612fab57612fab615e58565b6020026020010151613ddf565b9650600087511161304b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305991906159d9565b82146130e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b505050505050612972565b600085848151811061310657613106615e58565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061313157613131615e58565b6020026020010151905061314481613f3f565b955061315160018661579a565b945050506135db565b60028160200151510361355357600061317282613f64565b905060008160008151811061318957613189615e58565b016020015160f81c905060006131a0600283615e87565b6131ab906002615ea9565b905060006131bc848360ff16613f88565b905060006131ca8a89613f88565b905060006131d88383613fbe565b90508083511461326a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff85166002148061327f575060ff85166003145b1561346e5780825114613314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b61332e8760200151600181518110612fab57612fab615e58565b9c5060008d51116133c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133cf91906159d9565b881461345d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b505050505050505050505050612972565b60ff85161580613481575060ff85166001145b156134c0576134ad87602001516001815181106134a0576134a0615e58565b6020026020010151613f3f565b99506134b9818a61579a565b9850613548565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135db565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e681615e20565b915050612caa565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136ef84614072565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138ec57506000919050565b680755bf798b4a1bf1e5821261395e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c339190615ecc565b60006040518083038185875af1925050503d8060008114613c70576040519150601f19603f3d011682016040523d82523d6000602084013e613c75565b606091505b5091509150613c85828286614148565b979650505050505050565b80516060908067ffffffffffffffff811115613cae57613cae615238565b604051908082528060200260200182016040528015613cf357816020015b6040805180820190915260608082526020820152815260200190600190039081613ccc5790505b50915060005b81811015613d75576040518060400160405280858381518110613d1e57613d1e615e58565b60200260200101518152602001613d4d868481518110613d4057613d40615e58565b602002602001015161419b565b815250838281518110613d6257613d62615e58565b6020908102919091010152600101613cf9565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dd4578060011b82018184015160001a8060041c8253600f811660018301535050600101613da6565b509295945050505050565b60606000806000613def856141ae565b919450925090506000816001811115613e0a57613e0a615ee8565b14613e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613ea1828461579a565b855114613f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b7385602001518484614c1b565b60606020826000015110613f5b57613f5682613ddf565b610ffc565b610ffc82614caf565b6060610ffc613f838360200151600081518110612fab57612fab615e58565b613d7c565b606082518210613fa75750604080516020810190915260008152610ffc565b6129728383848651613fb991906159d9565b614cc5565b6000808251845110613fd1578251613fd4565b83515b90505b808210801561405b5750828281518110613ff357613ff3615e58565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061403257614032615e58565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406b57816001019150613fd7565b5092915050565b60008082116140dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614157575081612972565b8251156141675782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155ca565b6060610ffc6141a983614e9d565b614f86565b60008060008084600001511161426c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f8111614291576000600160009450945094505050614c14565b60b7811161449f5760006142a66080836159d9565b905080876000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143da57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b61448c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c14915050565b60bf81116147ed5760006144b460b7836159d9565b90508087600001511161456f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361464d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b61471b818461579a565b8951116147d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147db83600161579a565b9750955060009450614c149350505050565b60f781116148ce57600061480260c0836159d9565b9050808760000151116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c14915050565b60006148db60f7836159d9565b905080876000015111614996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b42818461579a565b895111614bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614c0283600161579a565b9750955060019450614c149350505050565b9193909250565b60608167ffffffffffffffff811115614c3657614c36615238565b6040519080825280601f01601f191660200182016040528015614c60576020820181803683370190505b5090508115612972576000614c75848661579a565b90506020820160005b84811015614c96578281015182820152602001614c7e565b84811115614ca5576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c1b565b60608182601f011015614d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614da0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e2c5760405191506000825260208201604052614e94565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e65578051835260209283019201614e4d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f96856141ae565b919450925090506001816001811115614fb157614fb1615ee8565b1461503e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b845161504a838561579a565b146150d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150ee5790505093506000835b86518110156151dc576000806151616040518060400160405280858c6000015161514591906159d9565b8152602001858c6020015161515a919061579a565b90526141ae565b50915091506040518060400160405280838361517d919061579a565b8152602001848b60200151615192919061579a565b8152508885815181106151a7576151a7615e58565b60209081029190910101526151bd60018561579a565b93506151c9818361579a565b6151d3908461579a565b9250505061511b565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520a57600080fd5b50565b803567ffffffffffffffff8116811461522557600080fd5b919050565b801515811461520a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152ae576152ae615238565b604052919050565b600082601f8301126152c757600080fd5b813567ffffffffffffffff8111156152e1576152e1615238565b61531260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615267565b81815284602083860101111561532757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535d57600080fd5b8635615368816151e8565b955060208701359450604087013593506153846060880161520d565b925060808701356153948161522a565b915060a087013567ffffffffffffffff8111156153b057600080fd5b6153bc89828a016152b6565b9150509295509295509295565b600060c082840312156153db57600080fd5b60405160c0810167ffffffffffffffff82821081831117156153ff576153ff615238565b81604052829350843583526020850135915061541a826151e8565b81602084015260408501359150615430826151e8565b816040840152606085013560608401526080850135608084015260a085013591508082111561545e57600080fd5b5061546b858286016152b6565b60a0830152505092915050565b600080600080600085870360e081121561549157600080fd5b863567ffffffffffffffff808211156154a957600080fd5b6154b58a838b016153c9565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154ee57600080fd5b60408901955060c089013592508083111561550857600080fd5b828901925089601f84011261551c57600080fd5b823591508082111561552d57600080fd5b508860208260051b840101111561554357600080fd5b959894975092955050506020019190565b60005b8381101561556f578181015183820152602001615557565b83811115611f015750506000910152565b60008151808452615598816020860160208601615554565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129726020830184615580565b6000602082840312156155ef57600080fd5b5035919050565b60ff8116811461520a57600080fd5b6000806000806080858703121561561b57600080fd5b8435615626816151e8565b93506020850135615636816155f6565b93969395505050506040820135916060013590565b60006020828403121561565d57600080fd5b813567ffffffffffffffff81111561567457600080fd5b615680848285016153c9565b949350505050565b60006020828403121561569a57600080fd5b6129728261520d565b6000806000606084860312156156b857600080fd5b83356156c3816151e8565b925060208401356156d3816151e8565b915060408401356156e3816151e8565b809150509250925092565b600080600080600060a0868803121561570657600080fd5b8535615711816151e8565b9450602086013593506157266040870161520d565b925060608601356157368161522a565b9150608086013567ffffffffffffffff81111561575257600080fd5b61575e888289016152b6565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157ad576157ad61576b565b500190565b6000602082840312156157c457600080fd5b5051919050565b6000602082840312156157dd57600080fd5b8151612972816151e8565b80516fffffffffffffffffffffffffffffffff8116811461522557600080fd5b60006060828403121561581a57600080fd5b6040516060810181811067ffffffffffffffff8211171561583d5761583d615238565b60405282518152615850602084016157e8565b6020820152615861604084016157e8565b60408201529392505050565b60006080828403121561587f57600080fd5b6040516080810181811067ffffffffffffffff821117156158a2576158a2615238565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158ee576158ee615238565b8360051b60206158ff818301615267565b86815291850191818101903684111561591757600080fd5b865b8481101561594b578035868111156159315760008081fd5b61593d36828b016152b6565b845250918301918301615919565b50979650505050505050565b60006020828403121561596957600080fd5b81516129728161522a565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c8816049850160208701615554565b919091016049019695505050505050565b6000828210156159eb576159eb61576b565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1757615a1761576b565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a4357615a4361576b565b01949350505050565b60008060408385031215615a5f57600080fd5b8251615a6a816151e8565b6020840151909250615a7b816155f6565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615ac457615ac4615a86565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1857615b1861576b565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5757615b5761576b565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8b57615b8b61576b565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd257615bd261576b565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0d57615c0d61576b565b60008712925087820587128484161615615c2957615c2961576b565b87850587128184161615615c3f57615c3f61576b565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8757615c8761576b565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cbb57615cbb61576b565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf957615cf961576b565b500290565b600082615d0d57615d0d615a86565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5d60c0830184615580565b98975050505050505050565b805163ffffffff8116811461522557600080fd5b600060c08284031215615d8f57600080fd5b60405160c0810181811067ffffffffffffffff82111715615db257615db2615238565b604052615dbe83615d69565b81526020830151615dce816155f6565b60208201526040830151615de1816155f6565b6040820152615df260608401615d69565b6060820152615e0360808401615d69565b6080820152615e1460a084016157e8565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e5157615e5161576b565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9a57615e9a615a86565b8060ff84160691505092915050565b600060ff821660ff841680821015615ec357615ec361576b565b90039392505050565b60008251615ede818460208701615554565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", + "deployedCode": "0x6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa366004615344565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615478565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155ca565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155dd565b610f47565b34801561031457600080fd5b50610188610323366004615605565b611002565b34801561033457600080fd5b5061018861034336600461564b565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155dd565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615688565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b506101886104493660046156a3565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155dd565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156ee565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c2919061579a565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157b2565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b610786898261579a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157b2565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157cb565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615808565b519050610a5d610a583686900386018661586d565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615808565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158d3565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615957565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615808565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c96959493929101615974565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155ca565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157b2565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615808565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126cd565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d9565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157b2565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff1661272b9092919063ffffffff16565b6060870151611a9f90826159d9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157b2565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126cd565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159f0565b610ffc90615208615a20565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612786565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a4c565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea959493929190615974565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155ca565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d9565b905060006121ae612899565b90506000816020015160ff16826000015163ffffffff166121cf9190615ab5565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b1d565b90506000836040015160ff168361221d9190615b91565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b91565b6122479190615ab5565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c4d565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff1661295a565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d9565b612979565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a20565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cc1565b9050600061240448633b9aca006129ce565b61240e9083615cfe565b905060005a61241d90886159d9565b9050808211156108655761086561243482846159d9565b6129e5565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a0e565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d12565b6000806125ad86612b1a565b90506125bb81868686612b4c565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157b2565b612663908361579a565b421192915050565b6001805463ffffffff831691906010906126a4908490700100000000000000000000000000000000900467ffffffffffffffff16615a20565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126dd866000612b7c565b905080612713576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127819084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff1661281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612936573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d7d565b600061296f6129698585612b9a565b83612baa565b90505b9392505050565b6000670de0b6b3a76400006129ba6129918583615ab5565b6129a390670de0b6b3a7640000615b1d565b6129b585670de0b6b3a7640000615b91565b612bb9565b6129c49086615b91565b61296f9190615ab5565b6000818310156129de5781612972565b5090919050565b6000805a90505b825a6129f890836159d9565b101561278157612a0782615e20565b91506129ec565b6000612a70826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612bea9092919063ffffffff16565b8051909150156127815780806020019051810190612a8e9190615957565b612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3691815260200190565b6040516020818303038152906040529050919050565b6000612b7384612b5d878686612bf9565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129de5781612972565b60008183126129de5781612972565b6000612972670de0b6b3a764000083612bd186613677565b612bdb9190615b91565b612be59190615ab5565b6138bb565b606061296f8484600085613afa565b60606000845111612c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c7184613c90565b90506000612c7e86613d7c565b9050600084604051602001612c9591815260200190565b60405160208183030381529060405290506000805b84518110156135ee576000858281518110612cc757612cc7615e58565b602002602001015190508451831115612d62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e1b5780518051602091820120604051612db092612d8a92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f72565b805151602011612ed15780518051602091820120604051612e4592612d8a92910190815260200190565b612e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7e6010600161579a565b8160200151510361315a57845183036130f257612fb88160200151601081518110612fab57612fab615e58565b6020026020010151613ddf565b9650600087511161304b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305991906159d9565b82146130e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b505050505050612972565b600085848151811061310657613106615e58565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061313157613131615e58565b6020026020010151905061314481613f3f565b955061315160018661579a565b945050506135db565b60028160200151510361355357600061317282613f64565b905060008160008151811061318957613189615e58565b016020015160f81c905060006131a0600283615e87565b6131ab906002615ea9565b905060006131bc848360ff16613f88565b905060006131ca8a89613f88565b905060006131d88383613fbe565b90508083511461326a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff85166002148061327f575060ff85166003145b1561346e5780825114613314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b61332e8760200151600181518110612fab57612fab615e58565b9c5060008d51116133c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133cf91906159d9565b881461345d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b505050505050505050505050612972565b60ff85161580613481575060ff85166001145b156134c0576134ad87602001516001815181106134a0576134a0615e58565b6020026020010151613f3f565b99506134b9818a61579a565b9850613548565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135db565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e681615e20565b915050612caa565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136ef84614072565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138ec57506000919050565b680755bf798b4a1bf1e5821261395e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c339190615ecc565b60006040518083038185875af1925050503d8060008114613c70576040519150601f19603f3d011682016040523d82523d6000602084013e613c75565b606091505b5091509150613c85828286614148565b979650505050505050565b80516060908067ffffffffffffffff811115613cae57613cae615238565b604051908082528060200260200182016040528015613cf357816020015b6040805180820190915260608082526020820152815260200190600190039081613ccc5790505b50915060005b81811015613d75576040518060400160405280858381518110613d1e57613d1e615e58565b60200260200101518152602001613d4d868481518110613d4057613d40615e58565b602002602001015161419b565b815250838281518110613d6257613d62615e58565b6020908102919091010152600101613cf9565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dd4578060011b82018184015160001a8060041c8253600f811660018301535050600101613da6565b509295945050505050565b60606000806000613def856141ae565b919450925090506000816001811115613e0a57613e0a615ee8565b14613e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613ea1828461579a565b855114613f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b7385602001518484614c1b565b60606020826000015110613f5b57613f5682613ddf565b610ffc565b610ffc82614caf565b6060610ffc613f838360200151600081518110612fab57612fab615e58565b613d7c565b606082518210613fa75750604080516020810190915260008152610ffc565b6129728383848651613fb991906159d9565b614cc5565b6000808251845110613fd1578251613fd4565b83515b90505b808210801561405b5750828281518110613ff357613ff3615e58565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061403257614032615e58565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406b57816001019150613fd7565b5092915050565b60008082116140dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614157575081612972565b8251156141675782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155ca565b6060610ffc6141a983614e9d565b614f86565b60008060008084600001511161426c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f8111614291576000600160009450945094505050614c14565b60b7811161449f5760006142a66080836159d9565b905080876000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143da57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b61448c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c14915050565b60bf81116147ed5760006144b460b7836159d9565b90508087600001511161456f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361464d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b61471b818461579a565b8951116147d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147db83600161579a565b9750955060009450614c149350505050565b60f781116148ce57600061480260c0836159d9565b9050808760000151116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c14915050565b60006148db60f7836159d9565b905080876000015111614996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b42818461579a565b895111614bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614c0283600161579a565b9750955060019450614c149350505050565b9193909250565b60608167ffffffffffffffff811115614c3657614c36615238565b6040519080825280601f01601f191660200182016040528015614c60576020820181803683370190505b5090508115612972576000614c75848661579a565b90506020820160005b84811015614c96578281015182820152602001614c7e565b84811115614ca5576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c1b565b60608182601f011015614d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614da0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e2c5760405191506000825260208201604052614e94565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e65578051835260209283019201614e4d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f96856141ae565b919450925090506001816001811115614fb157614fb1615ee8565b1461503e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b845161504a838561579a565b146150d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150ee5790505093506000835b86518110156151dc576000806151616040518060400160405280858c6000015161514591906159d9565b8152602001858c6020015161515a919061579a565b90526141ae565b50915091506040518060400160405280838361517d919061579a565b8152602001848b60200151615192919061579a565b8152508885815181106151a7576151a7615e58565b60209081029190910101526151bd60018561579a565b93506151c9818361579a565b6151d3908461579a565b9250505061511b565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520a57600080fd5b50565b803567ffffffffffffffff8116811461522557600080fd5b919050565b801515811461520a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152ae576152ae615238565b604052919050565b600082601f8301126152c757600080fd5b813567ffffffffffffffff8111156152e1576152e1615238565b61531260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615267565b81815284602083860101111561532757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535d57600080fd5b8635615368816151e8565b955060208701359450604087013593506153846060880161520d565b925060808701356153948161522a565b915060a087013567ffffffffffffffff8111156153b057600080fd5b6153bc89828a016152b6565b9150509295509295509295565b600060c082840312156153db57600080fd5b60405160c0810167ffffffffffffffff82821081831117156153ff576153ff615238565b81604052829350843583526020850135915061541a826151e8565b81602084015260408501359150615430826151e8565b816040840152606085013560608401526080850135608084015260a085013591508082111561545e57600080fd5b5061546b858286016152b6565b60a0830152505092915050565b600080600080600085870360e081121561549157600080fd5b863567ffffffffffffffff808211156154a957600080fd5b6154b58a838b016153c9565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154ee57600080fd5b60408901955060c089013592508083111561550857600080fd5b828901925089601f84011261551c57600080fd5b823591508082111561552d57600080fd5b508860208260051b840101111561554357600080fd5b959894975092955050506020019190565b60005b8381101561556f578181015183820152602001615557565b83811115611f015750506000910152565b60008151808452615598816020860160208601615554565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129726020830184615580565b6000602082840312156155ef57600080fd5b5035919050565b60ff8116811461520a57600080fd5b6000806000806080858703121561561b57600080fd5b8435615626816151e8565b93506020850135615636816155f6565b93969395505050506040820135916060013590565b60006020828403121561565d57600080fd5b813567ffffffffffffffff81111561567457600080fd5b615680848285016153c9565b949350505050565b60006020828403121561569a57600080fd5b6129728261520d565b6000806000606084860312156156b857600080fd5b83356156c3816151e8565b925060208401356156d3816151e8565b915060408401356156e3816151e8565b809150509250925092565b600080600080600060a0868803121561570657600080fd5b8535615711816151e8565b9450602086013593506157266040870161520d565b925060608601356157368161522a565b9150608086013567ffffffffffffffff81111561575257600080fd5b61575e888289016152b6565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157ad576157ad61576b565b500190565b6000602082840312156157c457600080fd5b5051919050565b6000602082840312156157dd57600080fd5b8151612972816151e8565b80516fffffffffffffffffffffffffffffffff8116811461522557600080fd5b60006060828403121561581a57600080fd5b6040516060810181811067ffffffffffffffff8211171561583d5761583d615238565b60405282518152615850602084016157e8565b6020820152615861604084016157e8565b60408201529392505050565b60006080828403121561587f57600080fd5b6040516080810181811067ffffffffffffffff821117156158a2576158a2615238565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158ee576158ee615238565b8360051b60206158ff818301615267565b86815291850191818101903684111561591757600080fd5b865b8481101561594b578035868111156159315760008081fd5b61593d36828b016152b6565b845250918301918301615919565b50979650505050505050565b60006020828403121561596957600080fd5b81516129728161522a565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c8816049850160208701615554565b919091016049019695505050505050565b6000828210156159eb576159eb61576b565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1757615a1761576b565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a4357615a4361576b565b01949350505050565b60008060408385031215615a5f57600080fd5b8251615a6a816151e8565b6020840151909250615a7b816155f6565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615ac457615ac4615a86565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1857615b1861576b565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5757615b5761576b565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8b57615b8b61576b565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd257615bd261576b565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0d57615c0d61576b565b60008712925087820587128484161615615c2957615c2961576b565b87850587128184161615615c3f57615c3f61576b565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8757615c8761576b565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cbb57615cbb61576b565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf957615cf961576b565b500290565b600082615d0d57615d0d615a86565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5d60c0830184615580565b98975050505050505050565b805163ffffffff8116811461522557600080fd5b600060c08284031215615d8f57600080fd5b60405160c0810181811067ffffffffffffffff82111715615db257615db2615238565b604052615dbe83615d69565b81526020830151615dce816155f6565b60208201526040830151615de1816155f6565b6040820152615df260608401615d69565b6060820152615e0360808401615d69565b6080820152615e1460a084016157e8565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e5157615e5161576b565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9a57615e9a615a86565b8060ff84160691505092915050565b600060ff821660ff841680821015615ec357615ec361576b565b90039392505050565b60008251615ede818460208701615554565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -3340,7 +3340,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3348,7 +3348,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3356,7 +3356,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3364,7 +3364,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3372,7 +3372,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3380,7 +3380,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -3388,7 +3388,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3396,7 +3396,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3404,7 +3404,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000036" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3412,7 +3412,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3420,7 +3420,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000037" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3428,7 +3428,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3436,7 +3436,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000035" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3444,7 +3444,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3452,7 +3452,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": true, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3460,7 +3460,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3468,7 +3468,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3476,7 +3476,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": true, "newValue": "0x000000000000000100000000000000000000000000000000000000003b9aca00", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3484,7 +3484,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000001" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3492,7 +3492,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -3564,7 +3564,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3578,7 +3578,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3590,7 +3590,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3604,7 +3604,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3616,7 +3616,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3630,7 +3630,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -3642,7 +3642,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -3656,7 +3656,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "isWrite": false, "newValue": "0x000000000000000000000000000000000000000000000000000000000000dead", "previousValue": "0x000000000000000000000000000000000000000000000000000000000000dead", @@ -11095,7 +11095,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c8200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11121,7 +11121,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c8200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d70809000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -11187,7 +11187,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d9000000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d000000000000000000000000978e3286eb805934215a88694d80b09aded68d90000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c8200000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11221,7 +11221,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x4f1ef28600000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", + "data": "0x4f1ef286000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c8200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000064c0c53b8b0000000000000000000000008b71b41d4dbeb2b6821d44692d3facaaf77480bb0000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d7080900000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -11240,7 +11240,7 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": true, - "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "newValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -11250,7 +11250,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11444,8 +11444,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", - "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "newValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", + "previousValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11454,7 +11454,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11530,8 +11530,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", - "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "newValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", + "previousValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11540,7 +11540,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11582,8 +11582,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", - "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "newValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", + "previousValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11592,7 +11592,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11634,8 +11634,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", - "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "newValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", + "previousValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11644,7 +11644,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11738,8 +11738,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", - "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "newValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", + "previousValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11748,7 +11748,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11842,8 +11842,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", - "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "newValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", + "previousValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11852,7 +11852,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -11946,8 +11946,8 @@ { "account": "0x978e3286EB805934215a88694d80b09aDed68D90", "isWrite": false, - "newValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", - "previousValue": "0x00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe", + "newValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", + "previousValue": "0x000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -11956,7 +11956,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe", + "account": "0xA45db41D98295c8E260dc2000d2a119A11174C82", "chainInfo": { "chainId": 31337, "forkId": 0 diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index eb3d3dd0acd..66dc66b2bdb 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -21,7 +21,7 @@ contract DeploymentSummary is DeploymentSummaryCode { address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; - address internal constant optimismPortalAddress = 0x38FCF68EDAD8F0d18B72861cFeC8AA4AC14acEBe; + address internal constant optimismPortalAddress = 0xA45db41D98295c8E260dc2000d2a119A11174C82; address internal constant optimismPortalProxyAddress = 0x978e3286EB805934215a88694d80b09aDed68D90; address internal constant protocolVersionsAddress = 0xfbfD64a6C0257F613feFCe050Aa30ecC3E3d7C3F; address internal constant protocolVersionsProxyAddress = 0x416C42991d05b31E9A6dC209e91AD22b79D87Ae6; @@ -437,7 +437,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"000000000000000000000000000000000000000000000000000000000000000a"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"00000000000000000000000038fcf68edad8f0d18b72861cfec8aa4ac14acebe"; + value = hex"000000000000000000000000a45db41d98295c8e260dc2000d2a119a11174c82"; vm.store(optimismPortalProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index cc1a2f3abcf..ac69e19bb87 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -35,7 +35,7 @@ contract DeploymentSummaryCode { bytes internal constant l1ERC721BridgeProxyCode = hex"60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100be5780638f283970146100f8578063f851a440146101185761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61012d565b005b61006b61012d565b34801561008157600080fd5b5061006b6100903660046106dd565b610224565b6100a86100a33660046106f8565b610296565b6040516100b5919061077b565b60405180910390f35b3480156100ca57600080fd5b506100d3610419565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b5565b34801561010457600080fd5b5061006b6101133660046106dd565b6104b0565b34801561012457600080fd5b506100d3610517565b60006101577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905073ffffffffffffffffffffffffffffffffffffffff8116610201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f50726f78793a20696d706c656d656e746174696f6e206e6f7420696e6974696160448201527f6c697a656400000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3660008037600080366000845af43d6000803e8061021e573d6000fd5b503d6000f35b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061027d575033155b1561028e5761028b816105a3565b50565b61028b61012d565b60606102c07fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806102f7575033155b1561040a57610305846105a3565b6000808573ffffffffffffffffffffffffffffffffffffffff16858560405161032f9291906107ee565b600060405180830381855af49150503d806000811461036a576040519150601f19603f3d011682016040523d82523d6000602084013e61036f565b606091505b509150915081610401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f50726f78793a2064656c656761746563616c6c20746f206e657720696d706c6560448201527f6d656e746174696f6e20636f6e7472616374206661696c65640000000000000060648201526084016101f8565b91506104129050565b61041261012d565b9392505050565b60006104437fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061047a575033155b156104a557507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6104ad61012d565b90565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610509575033155b1561028e5761028b8161060c565b60006105417fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610578575033155b156104a557507fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60006106367fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61038381556040805173ffffffffffffffffffffffffffffffffffffffff80851682528616602082015292935090917f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f910160405180910390a1505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146106d857600080fd5b919050565b6000602082840312156106ef57600080fd5b610412826106b4565b60008060006040848603121561070d57600080fd5b610716846106b4565b9250602084013567ffffffffffffffff8082111561073357600080fd5b818601915086601f83011261074757600080fd5b81358181111561075657600080fd5b87602082850101111561076857600080fd5b6020830194508093505050509250925092565b600060208083528351808285015260005b818110156107a85785810183015185820160400152820161078c565b818111156107ba576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b818382376000910190815291905056fea164736f6c634300080f000a"; bytes internal constant optimismPortalCode = - hex"6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa36600461533e565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615472565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155c4565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155d7565b610f47565b34801561031457600080fd5b506101886103233660046155ff565b611002565b34801561033457600080fd5b50610188610343366004615645565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155d7565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615682565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b5061018861044936600461569d565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155d7565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156e8565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c29190615794565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157ac565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b6107868982615794565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157ac565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157c5565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615802565b519050610a5d610a5836869003860186615867565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615802565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158cd565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615951565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615802565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c9695949392910161596e565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155c4565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157ac565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615802565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126c7565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d3565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157ac565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff166127259092919063ffffffff16565b6060870151611a9f90826159d3565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157ac565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126c7565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159ea565b610ffc90615208615a1a565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612780565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a46565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea95949392919061596e565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155c4565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d3565b905060006121ae612893565b90506000816020015160ff16826000015163ffffffff166121cf9190615aaf565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b17565b90506000836040015160ff168361221d9190615b8b565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b8b565b6122479190615aaf565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c47565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff16612954565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d3565b612973565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cbb565b9050600061240448633b9aca006129c8565b61240e9083615cf8565b905060005a61241d90886159d3565b9050808211156108655761086561243482846159d3565b6129df565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a08565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d0c565b6000806125ad86612b14565b90506125bb81868686612b46565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157ac565b6126639083615794565b421192915050565b6001805482919060109061269e908490700100000000000000000000000000000000900467ffffffffffffffff16615a1a565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126d7866000612b76565b90508061270d576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff831660248201526044810182905261277b9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff16612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612930573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d77565b60006129696129638585612b94565b83612ba4565b90505b9392505050565b6000670de0b6b3a76400006129b461298b8583615aaf565b61299d90670de0b6b3a7640000615b17565b6129af85670de0b6b3a7640000615b8b565b612bb3565b6129be9086615b8b565b6129699190615aaf565b6000818310156129d8578161296c565b5090919050565b6000805a90505b825a6129f290836159d3565b101561277b57612a0182615e1a565b91506129e6565b6000612a6a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612be49092919063ffffffff16565b80519091501561277b5780806020019051810190612a889190615951565b61277b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3091815260200190565b6040516020818303038152906040529050919050565b6000612b6d84612b57878686612bf3565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129d8578161296c565b60008183126129d8578161296c565b600061296c670de0b6b3a764000083612bcb86613671565b612bd59190615b8b565b612bdf9190615aaf565b6138b5565b60606129698484600085613af4565b60606000845111612c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c6b84613c8a565b90506000612c7886613d76565b9050600084604051602001612c8f91815260200190565b60405160208183030381529060405290506000805b84518110156135e8576000858281518110612cc157612cc1615e52565b602002602001015190508451831115612d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e155780518051602091820120604051612daa92612d8492910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f6c565b805151602011612ecb5780518051602091820120604051612e3f92612d8492910190815260200190565b612e10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7860106001615794565b8160200151510361315457845183036130ec57612fb28160200151601081518110612fa557612fa5615e52565b6020026020010151613dd9565b96506000875111613045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305391906159d3565b82146130e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b50505050505061296c565b600085848151811061310057613100615e52565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061312b5761312b615e52565b6020026020010151905061313e81613f39565b955061314b600186615794565b945050506135d5565b60028160200151510361354d57600061316c82613f5e565b905060008160008151811061318357613183615e52565b016020015160f81c9050600061319a600283615e81565b6131a5906002615ea3565b905060006131b6848360ff16613f82565b905060006131c48a89613f82565b905060006131d28383613fb8565b905080835114613264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff851660021480613279575060ff85166003145b15613468578082511461330e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b6133288760200151600181518110612fa557612fa5615e52565b9c5060008d51116133bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133c991906159d3565b8814613457576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b50505050505050505050505061296c565b60ff8516158061347b575060ff85166001145b156134ba576134a7876020015160018151811061349a5761349a615e52565b6020026020010151613f39565b99506134b3818a615794565b9850613542565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135d5565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e081615e1a565b915050612ca4565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136e98461406c565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138e657506000919050565b680755bf798b4a1bf1e58212613958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b86576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c04576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c2d9190615ec6565b60006040518083038185875af1925050503d8060008114613c6a576040519150601f19603f3d011682016040523d82523d6000602084013e613c6f565b606091505b5091509150613c7f828286614142565b979650505050505050565b80516060908067ffffffffffffffff811115613ca857613ca8615232565b604051908082528060200260200182016040528015613ced57816020015b6040805180820190915260608082526020820152815260200190600190039081613cc65790505b50915060005b81811015613d6f576040518060400160405280858381518110613d1857613d18615e52565b60200260200101518152602001613d47868481518110613d3a57613d3a615e52565b6020026020010151614195565b815250838281518110613d5c57613d5c615e52565b6020908102919091010152600101613cf3565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dce578060011b82018184015160001a8060041c8253600f811660018301535050600101613da0565b509295945050505050565b60606000806000613de9856141a8565b919450925090506000816001811115613e0457613e04615ee2565b14613e91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613e9b8284615794565b855114613f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b6d85602001518484614c15565b60606020826000015110613f5557613f5082613dd9565b610ffc565b610ffc82614ca9565b6060610ffc613f7d8360200151600081518110612fa557612fa5615e52565b613d76565b606082518210613fa15750604080516020810190915260008152610ffc565b61296c8383848651613fb391906159d3565b614cbf565b6000808251845110613fcb578251613fce565b83515b90505b80821080156140555750828281518110613fed57613fed615e52565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061402c5761402c615e52565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406557816001019150613fd1565b5092915050565b60008082116140d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060831561415157508161296c565b8251156141615782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155c4565b6060610ffc6141a383614e97565b614f80565b600080600080846000015111614266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f811161428b576000600160009450945094505050614c0e565b60b781116144995760006142a06080836159d3565b90508087600001511161435b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143d457507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b614486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c0e915050565b60bf81116147e75760006144ae60b7836159d3565b905080876000015111614569576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c6037811161470b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b6147158184615794565b8951116147ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147d5836001615794565b9750955060009450614c0e9350505050565b60f781116148c85760006147fc60c0836159d3565b9050808760000151116148b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c0e915050565b60006148d560f7836159d3565b905080876000015111614990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b32576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b3c8184615794565b895111614bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614bfc836001615794565b9750955060019450614c0e9350505050565b9193909250565b60608167ffffffffffffffff811115614c3057614c30615232565b6040519080825280601f01601f191660200182016040528015614c5a576020820181803683370190505b509050811561296c576000614c6f8486615794565b90506020820160005b84811015614c90578281015182820152602001614c78565b84811115614c9f576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c15565b60608182601f011015614d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614d9a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e265760405191506000825260208201604052614e8e565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e5f578051835260209283019201614e47565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f90856141a8565b919450925090506001816001811115614fab57614fab615ee2565b14615038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b84516150448385615794565b146150d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150e85790505093506000835b86518110156151d65760008061515b6040518060400160405280858c6000015161513f91906159d3565b8152602001858c602001516151549190615794565b90526141a8565b5091509150604051806040016040528083836151779190615794565b8152602001848b6020015161518c9190615794565b8152508885815181106151a1576151a1615e52565b60209081029190910101526151b7600185615794565b93506151c38183615794565b6151cd9084615794565b92505050615115565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520457600080fd5b50565b803567ffffffffffffffff8116811461521f57600080fd5b919050565b801515811461520457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152a8576152a8615232565b604052919050565b600082601f8301126152c157600080fd5b813567ffffffffffffffff8111156152db576152db615232565b61530c60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615261565b81815284602083860101111561532157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535757600080fd5b8635615362816151e2565b9550602087013594506040870135935061537e60608801615207565b9250608087013561538e81615224565b915060a087013567ffffffffffffffff8111156153aa57600080fd5b6153b689828a016152b0565b9150509295509295509295565b600060c082840312156153d557600080fd5b60405160c0810167ffffffffffffffff82821081831117156153f9576153f9615232565b816040528293508435835260208501359150615414826151e2565b8160208401526040850135915061542a826151e2565b816040840152606085013560608401526080850135608084015260a085013591508082111561545857600080fd5b50615465858286016152b0565b60a0830152505092915050565b600080600080600085870360e081121561548b57600080fd5b863567ffffffffffffffff808211156154a357600080fd5b6154af8a838b016153c3565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154e857600080fd5b60408901955060c089013592508083111561550257600080fd5b828901925089601f84011261551657600080fd5b823591508082111561552757600080fd5b508860208260051b840101111561553d57600080fd5b959894975092955050506020019190565b60005b83811015615569578181015183820152602001615551565b83811115611f015750506000910152565b6000815180845261559281602086016020860161554e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061296c602083018461557a565b6000602082840312156155e957600080fd5b5035919050565b60ff8116811461520457600080fd5b6000806000806080858703121561561557600080fd5b8435615620816151e2565b93506020850135615630816155f0565b93969395505050506040820135916060013590565b60006020828403121561565757600080fd5b813567ffffffffffffffff81111561566e57600080fd5b61567a848285016153c3565b949350505050565b60006020828403121561569457600080fd5b61296c82615207565b6000806000606084860312156156b257600080fd5b83356156bd816151e2565b925060208401356156cd816151e2565b915060408401356156dd816151e2565b809150509250925092565b600080600080600060a0868803121561570057600080fd5b853561570b816151e2565b94506020860135935061572060408701615207565b9250606086013561573081615224565b9150608086013567ffffffffffffffff81111561574c57600080fd5b615758888289016152b0565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157a7576157a7615765565b500190565b6000602082840312156157be57600080fd5b5051919050565b6000602082840312156157d757600080fd5b815161296c816151e2565b80516fffffffffffffffffffffffffffffffff8116811461521f57600080fd5b60006060828403121561581457600080fd5b6040516060810181811067ffffffffffffffff8211171561583757615837615232565b6040528251815261584a602084016157e2565b602082015261585b604084016157e2565b60408201529392505050565b60006080828403121561587957600080fd5b6040516080810181811067ffffffffffffffff8211171561589c5761589c615232565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158e8576158e8615232565b8360051b60206158f9818301615261565b86815291850191818101903684111561591157600080fd5b865b848110156159455780358681111561592b5760008081fd5b61593736828b016152b0565b845250918301918301615913565b50979650505050505050565b60006020828403121561596357600080fd5b815161296c81615224565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c281604985016020870161554e565b919091016049019695505050505050565b6000828210156159e5576159e5615765565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1157615a11615765565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a3d57615a3d615765565b01949350505050565b60008060408385031215615a5957600080fd5b8251615a64816151e2565b6020840151909250615a75816155f0565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615abe57615abe615a80565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1257615b12615765565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5157615b51615765565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8557615b85615765565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bcc57615bcc615765565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0757615c07615765565b60008712925087820587128484161615615c2357615c23615765565b87850587128184161615615c3957615c39615765565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8157615c81615765565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cb557615cb5615765565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf357615cf3615765565b500290565b600082615d0757615d07615a80565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5760c083018461557a565b98975050505050505050565b805163ffffffff8116811461521f57600080fd5b600060c08284031215615d8957600080fd5b60405160c0810181811067ffffffffffffffff82111715615dac57615dac615232565b604052615db883615d63565b81526020830151615dc8816155f0565b60208201526040830151615ddb816155f0565b6040820152615dec60608401615d63565b6060820152615dfd60808401615d63565b6080820152615e0e60a084016157e2565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e4b57615e4b615765565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9457615e94615a80565b8060ff84160691505092915050565b600060ff821660ff841680821015615ebd57615ebd615765565b90039392505050565b60008251615ed881846020870161554e565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; + hex"6080604052600436106101635760003560e01c80638c3152e9116100c0578063b69ef8a811610074578063cff0ab9611610059578063cff0ab961461044e578063e965084c146104ef578063e9e05c421461057b57600080fd5b8063b69ef8a81461040b578063c0c53b8b1461042e57600080fd5b80639bf62d82116100a55780639bf62d8214610375578063a14238e7146103a2578063a35d99df146103d257600080fd5b80638c3152e9146103285780639b5f694a1461034857600080fd5b806354fd4d50116101175780636dbffb78116100fc5780636dbffb78146102e857806371cfaa3f146103085780638b4c40b01461018857600080fd5b806354fd4d501461026d5780635c975abb146102c357600080fd5b806335e80ab31161014857806335e80ab314610206578063452a9320146102385780634870496f1461024d57600080fd5b8063149f2f221461018f57806333d7e2bd146101af57600080fd5b3661018a576101883334620186a0600060405180602001604052806000815250610589565b005b600080fd5b34801561019b57600080fd5b506101886101aa366004615344565b61062e565b3480156101bb57600080fd5b506037546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561021257600080fd5b506035546101dc90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561024457600080fd5b506101dc61086f565b34801561025957600080fd5b50610188610268366004615478565b610907565b34801561027957600080fd5b506102b66040518060400160405280600581526020017f322e372e3000000000000000000000000000000000000000000000000000000081525081565b6040516101fd91906155ca565b3480156102cf57600080fd5b506102d8610eb4565b60405190151581526020016101fd565b3480156102f457600080fd5b506102d86103033660046155dd565b610f47565b34801561031457600080fd5b50610188610323366004615605565b611002565b34801561033457600080fd5b5061018861034336600461564b565b6111c4565b34801561035457600080fd5b506036546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561038157600080fd5b506032546101dc9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103ae57600080fd5b506102d86103bd3660046155dd565b60336020526000908152604090205460ff1681565b3480156103de57600080fd5b506103f26103ed366004615688565b611c46565b60405167ffffffffffffffff90911681526020016101fd565b34801561041757600080fd5b50610420611c5f565b6040519081526020016101fd565b34801561043a57600080fd5b506101886104493660046156a3565b611cb9565b34801561045a57600080fd5b506001546104b6906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101fd565b3480156104fb57600080fd5b5061054d61050a3660046155dd565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101fd565b6101886105893660046156ee565b8260005a90506000610599611f23565b50905073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee148015906105d557503415155b1561060c576040517ff2365b5b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61061a883489898989611fc0565b50610625828261216c565b50505050505050565b8260005a9050600061063e611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff8216016106b0576040517f0eaf3c0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b87603d60008282546106c2919061579a565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610734573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061075891906157b2565b905061077c73ffffffffffffffffffffffffffffffffffffffff831633308c612439565b610786898261579a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa1580156107f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081491906157b2565b1461084b576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108598a8a8a8a8a8a611fc0565b5050610865828261216c565b5050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663452a93206040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090291906157cb565b905090565b61090f610eb4565b15610946576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109af576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6036546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810186905260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190615808565b519050610a5d610a583686900386018661586d565b612515565b8114610af0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6000610afb87612571565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c115750805160365460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d9190615808565b5114155b610c9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610ae7565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d669101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d5c888a6158d3565b8a604001356125a1565b610df2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610ae7565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c975abb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f23573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615957565b6036546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101839052600091610ffc9173ffffffffffffffffffffffffffffffffffffffff9091169063a25ae55790602401606060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe19190615808565b602001516fffffffffffffffffffffffffffffffff166125c5565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff163314611053576040517f82b4290000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61105f6201388061266b565b60405173ffffffffffffffffffffffffffffffffffffffff8516602482015260ff8416604482015260648101839052608481018290526000907342000000000000000000000000000000000000159073deaddeaddeaddeaddeaddeaddeaddeaddead0001907fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c3290849081906201388090829060a401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f71cfaa3f00000000000000000000000000000000000000000000000000000000179052905161117c96959493929101615974565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290526111b4916155ca565b60405180910390a450505050565b565b6111cc610eb4565b15611203576040517ff480973e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611256576040517f9396d15600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061126182612571565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361134c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610ae7565b603660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dd91906157b2565b81602001516fffffffffffffffffffffffffffffffff1610156114a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610ae7565b6114c781602001516fffffffffffffffffffffffffffffffff166125c5565b611579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60365460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015260009173ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190615808565b82518151919250146116de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610ae7565b6116fd81602001516fffffffffffffffffffffffffffffffff166125c5565b6117af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610ae7565b60008381526033602052604090205460ff161561184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610ae7565b6000838152603360209081526040822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558501516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff0000000000000000000000000000000000000000909216919091179055806118d9611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff82160161193c576119358660400151876080015188606001518960a001516126cd565b9150611b8f565b8073ffffffffffffffffffffffffffffffffffffffff16866040015173ffffffffffffffffffffffffffffffffffffffff16036119a5576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606086015115611b66578560600151603d60008282546119c591906159d9565b90915550506040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5b91906157b2565b9050611a90876040015188606001518473ffffffffffffffffffffffffffffffffffffffff1661272b9092919063ffffffff16565b6060870151611a9f90826159d9565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff8416906370a0823190602401602060405180830381865afa158015611b09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2d91906157b2565b14611b64576040517f90b8ec1800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60a08601515115611b8a576119358660400151876080015160008960a001516126cd565b600191505b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405185907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b90611bf190851515815260200190565b60405180910390a281158015611c075750326001145b15611c3e576040517feeae4ed300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050565b6000611c538260106159f0565b610ffc90615208615a20565b600080611c6a611f23565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611cb1574791505090565b5050603d5490565b600054610100900460ff1615808015611cd95750600054600160ff909116105b80611cf35750303b158015611cf3575060005460ff166001145b611d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610ae7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015611ddd57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603680547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff8781169190911790925560378054909116858316179055603580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101008584160217905560325416611e9657603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b611e9e612786565b8015611f0157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b603754604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015611f93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb79190615a4c565b90939092509050565b818015611fe2575073ffffffffffffffffffffffffffffffffffffffff861615155b15612019576040517f13496fda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120238151611c46565b67ffffffffffffffff168367ffffffffffffffff161015612070576040517f4929b80800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6201d4c0815111156120ae576040517f73052b0f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b333281146120cf575033731111000000000000000000000000000000001111015b600086868686866040516020016120ea959493929190615974565b604051602081830303815290604052905060008873ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161215a91906155ca565b60405180910390a45050505050505050565b6001546000906121a2907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436159d9565b905060006121ae612899565b90506000816020015160ff16826000015163ffffffff166121cf9190615ab5565b9050821561230657600154600090612206908390700100000000000000000000000000000000900467ffffffffffffffff16615b1d565b90506000836040015160ff168361221d9190615b91565b60015461223d9084906fffffffffffffffffffffffffffffffff16615b91565b6122479190615ab5565b600154909150600090612298906122719084906fffffffffffffffffffffffffffffffff16615c4d565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff1661295a565b905060018611156122c7576122c461227182876040015160ff1660018a6122bf91906159d9565b612979565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090612339908490700100000000000000000000000000000000900467ffffffffffffffff16615a20565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff1613156123c6576040517f77ebef4d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001546000906123f2906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615cc1565b9050600061240448633b9aca006129ce565b61240e9083615cfe565b905060005a61241d90886159d9565b9050808211156108655761086561243482846159d9565b6129e5565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052611f019085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612a0e565b60008160000151826020015183604001518460600151604051602001612554949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097612554979096959101615d12565b6000806125ad86612b1a565b90506125bb81868686612b4c565b9695505050505050565b603654604080517ff4daa291000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163f4daa2919160048083019260209291908290030181865afa158015612635573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265991906157b2565b612663908361579a565b421192915050565b6001805463ffffffff831691906010906126a4908490700100000000000000000000000000000000900467ffffffffffffffff16615a20565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b60008060006126dd866000612b7c565b905080612713576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526127819084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401612493565b505050565b600054610100900460ff1661281d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610ae7565b6001547801000000000000000000000000000000000000000000000000900467ffffffffffffffff166000036111c25760408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260375483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa158015612936573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109029190615d7d565b600061296f6129698585612b9a565b83612baa565b90505b9392505050565b6000670de0b6b3a76400006129ba6129918583615ab5565b6129a390670de0b6b3a7640000615b1d565b6129b585670de0b6b3a7640000615b91565b612bb9565b6129c49086615b91565b61296f9190615ab5565b6000818310156129de5781612972565b5090919050565b6000805a90505b825a6129f890836159d9565b101561278157612a0782615e20565b91506129ec565b6000612a70826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612bea9092919063ffffffff16565b8051909150156127815780806020019051810190612a8e9190615957565b612781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610ae7565b60608180519060200120604051602001612b3691815260200190565b6040516020818303038152906040529050919050565b6000612b7384612b5d878686612bf9565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b6000818312156129de5781612972565b60008183126129de5781612972565b6000612972670de0b6b3a764000083612bd186613677565b612bdb9190615b91565b612be59190615ab5565b6138bb565b606061296f8484600085613afa565b60606000845111612c66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610ae7565b6000612c7184613c90565b90506000612c7e86613d7c565b9050600084604051602001612c9591815260200190565b60405160208183030381529060405290506000805b84518110156135ee576000858281518110612cc757612cc7615e58565b602002602001015190508451831115612d62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610ae7565b82600003612e1b5780518051602091820120604051612db092612d8a92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610ae7565b612f72565b805151602011612ed15780518051602091820120604051612e4592612d8a92910190815260200190565b612e16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610ae7565b805184516020808701919091208251919092012014612f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610ae7565b612f7e6010600161579a565b8160200151510361315a57845183036130f257612fb88160200151601081518110612fab57612fab615e58565b6020026020010151613ddf565b9650600087511161304b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610ae7565b6001865161305991906159d9565b82146130e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610ae7565b505050505050612972565b600085848151811061310657613106615e58565b602001015160f81c60f81b60f81c9050600082602001518260ff168151811061313157613131615e58565b6020026020010151905061314481613f3f565b955061315160018661579a565b945050506135db565b60028160200151510361355357600061317282613f64565b905060008160008151811061318957613189615e58565b016020015160f81c905060006131a0600283615e87565b6131ab906002615ea9565b905060006131bc848360ff16613f88565b905060006131ca8a89613f88565b905060006131d88383613fbe565b90508083511461326a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610ae7565b60ff85166002148061327f575060ff85166003145b1561346e5780825114613314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610ae7565b61332e8760200151600181518110612fab57612fab615e58565b9c5060008d51116133c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610ae7565b60018c516133cf91906159d9565b881461345d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610ae7565b505050505050505050505050612972565b60ff85161580613481575060ff85166001145b156134c0576134ad87602001516001815181106134a0576134a0615e58565b6020026020010151613f3f565b99506134b9818a61579a565b9850613548565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610ae7565b5050505050506135db565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610ae7565b50806135e681615e20565b915050612caa565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610ae7565b60008082136136e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b600060606136ef84614072565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c182136138ec57506000919050565b680755bf798b4a1bf1e5821261395e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610ae7565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606082471015613b8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610ae7565b73ffffffffffffffffffffffffffffffffffffffff85163b613c0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610ae7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613c339190615ecc565b60006040518083038185875af1925050503d8060008114613c70576040519150601f19603f3d011682016040523d82523d6000602084013e613c75565b606091505b5091509150613c85828286614148565b979650505050505050565b80516060908067ffffffffffffffff811115613cae57613cae615238565b604051908082528060200260200182016040528015613cf357816020015b6040805180820190915260608082526020820152815260200190600190039081613ccc5790505b50915060005b81811015613d75576040518060400160405280858381518110613d1e57613d1e615e58565b60200260200101518152602001613d4d868481518110613d4057613d40615e58565b602002602001015161419b565b815250838281518110613d6257613d62615e58565b6020908102919091010152600101613cf9565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613dd4578060011b82018184015160001a8060041c8253600f811660018301535050600101613da6565b509295945050505050565b60606000806000613def856141ae565b919450925090506000816001811115613e0a57613e0a615ee8565b14613e97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610ae7565b613ea1828461579a565b855114613f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610ae7565b612b7385602001518484614c1b565b60606020826000015110613f5b57613f5682613ddf565b610ffc565b610ffc82614caf565b6060610ffc613f838360200151600081518110612fab57612fab615e58565b613d7c565b606082518210613fa75750604080516020810190915260008152610ffc565b6129728383848651613fb991906159d9565b614cc5565b6000808251845110613fd1578251613fd4565b83515b90505b808210801561405b5750828281518110613ff357613ff3615e58565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191684838151811061403257614032615e58565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561406b57816001019150613fd7565b5092915050565b60008082116140dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610ae7565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b60608315614157575081612972565b8251156141675782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae791906155ca565b6060610ffc6141a983614e9d565b614f86565b60008060008084600001511161426c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b6020840151805160001a607f8111614291576000600160009450945094505050614c14565b60b7811161449f5760006142a66080836159d9565b905080876000015111614361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610ae7565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806143da57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b61448c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610ae7565b5060019550935060009250614c14915050565b60bf81116147ed5760006144b460b7836159d9565b90508087600001511161456f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610ae7565b60018301517fff0000000000000000000000000000000000000000000000000000000000000016600081900361464d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610ae7565b61471b818461579a565b8951116147d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610ae7565b6147db83600161579a565b9750955060009450614c149350505050565b60f781116148ce57600061480260c0836159d9565b9050808760000151116148bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b600195509350849250614c14915050565b60006148db60f7836159d9565b905080876000015111614996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610ae7565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610ae7565b600184015160088302610100031c60378111614b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610ae7565b614b42818461579a565b895111614bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610ae7565b614c0283600161579a565b9750955060019450614c149350505050565b9193909250565b60608167ffffffffffffffff811115614c3657614c36615238565b6040519080825280601f01601f191660200182016040528015614c60576020820181803683370190505b5090508115612972576000614c75848661579a565b90506020820160005b84811015614c96578281015182820152602001614c7e565b84811115614ca5576000858301525b5050509392505050565b6060610ffc826020015160008460000151614c1b565b60608182601f011015614d34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b828284011015614da0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610ae7565b81830184511015614e0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610ae7565b606082158015614e2c5760405191506000825260208201604052614e94565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015614e65578051835260209283019201614e4d565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b60408051808201909152600080825260208201526000825111614f68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610ae7565b50604080518082019091528151815260209182019181019190915290565b60606000806000614f96856141ae565b919450925090506001816001811115614fb157614fb1615ee8565b1461503e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610ae7565b845161504a838561579a565b146150d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610ae7565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816150ee5790505093506000835b86518110156151dc576000806151616040518060400160405280858c6000015161514591906159d9565b8152602001858c6020015161515a919061579a565b90526141ae565b50915091506040518060400160405280838361517d919061579a565b8152602001848b60200151615192919061579a565b8152508885815181106151a7576151a7615e58565b60209081029190910101526151bd60018561579a565b93506151c9818361579a565b6151d3908461579a565b9250505061511b565b50845250919392505050565b73ffffffffffffffffffffffffffffffffffffffff8116811461520a57600080fd5b50565b803567ffffffffffffffff8116811461522557600080fd5b919050565b801515811461520a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156152ae576152ae615238565b604052919050565b600082601f8301126152c757600080fd5b813567ffffffffffffffff8111156152e1576152e1615238565b61531260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601615267565b81815284602083860101111561532757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060c0878903121561535d57600080fd5b8635615368816151e8565b955060208701359450604087013593506153846060880161520d565b925060808701356153948161522a565b915060a087013567ffffffffffffffff8111156153b057600080fd5b6153bc89828a016152b6565b9150509295509295509295565b600060c082840312156153db57600080fd5b60405160c0810167ffffffffffffffff82821081831117156153ff576153ff615238565b81604052829350843583526020850135915061541a826151e8565b81602084015260408501359150615430826151e8565b816040840152606085013560608401526080850135608084015260a085013591508082111561545e57600080fd5b5061546b858286016152b6565b60a0830152505092915050565b600080600080600085870360e081121561549157600080fd5b863567ffffffffffffffff808211156154a957600080fd5b6154b58a838b016153c9565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156154ee57600080fd5b60408901955060c089013592508083111561550857600080fd5b828901925089601f84011261551c57600080fd5b823591508082111561552d57600080fd5b508860208260051b840101111561554357600080fd5b959894975092955050506020019190565b60005b8381101561556f578181015183820152602001615557565b83811115611f015750506000910152565b60008151808452615598816020860160208601615554565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006129726020830184615580565b6000602082840312156155ef57600080fd5b5035919050565b60ff8116811461520a57600080fd5b6000806000806080858703121561561b57600080fd5b8435615626816151e8565b93506020850135615636816155f6565b93969395505050506040820135916060013590565b60006020828403121561565d57600080fd5b813567ffffffffffffffff81111561567457600080fd5b615680848285016153c9565b949350505050565b60006020828403121561569a57600080fd5b6129728261520d565b6000806000606084860312156156b857600080fd5b83356156c3816151e8565b925060208401356156d3816151e8565b915060408401356156e3816151e8565b809150509250925092565b600080600080600060a0868803121561570657600080fd5b8535615711816151e8565b9450602086013593506157266040870161520d565b925060608601356157368161522a565b9150608086013567ffffffffffffffff81111561575257600080fd5b61575e888289016152b6565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156157ad576157ad61576b565b500190565b6000602082840312156157c457600080fd5b5051919050565b6000602082840312156157dd57600080fd5b8151612972816151e8565b80516fffffffffffffffffffffffffffffffff8116811461522557600080fd5b60006060828403121561581a57600080fd5b6040516060810181811067ffffffffffffffff8211171561583d5761583d615238565b60405282518152615850602084016157e8565b6020820152615861604084016157e8565b60408201529392505050565b60006080828403121561587f57600080fd5b6040516080810181811067ffffffffffffffff821117156158a2576158a2615238565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff808411156158ee576158ee615238565b8360051b60206158ff818301615267565b86815291850191818101903684111561591757600080fd5b865b8481101561594b578035868111156159315760008081fd5b61593d36828b016152b6565b845250918301918301615919565b50979650505050505050565b60006020828403121561596957600080fd5b81516129728161522a565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516159c8816049850160208701615554565b919091016049019695505050505050565b6000828210156159eb576159eb61576b565b500390565b600067ffffffffffffffff80831681851681830481118215151615615a1757615a1761576b565b02949350505050565b600067ffffffffffffffff808316818516808303821115615a4357615a4361576b565b01949350505050565b60008060408385031215615a5f57600080fd5b8251615a6a816151e8565b6020840151909250615a7b816155f6565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082615ac457615ac4615a86565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615615b1857615b1861576b565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615b5757615b5761576b565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615b8b57615b8b61576b565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615615bd257615bd261576b565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615615c0d57615c0d61576b565b60008712925087820587128484161615615c2957615c2961576b565b87850587128184161615615c3f57615c3f61576b565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615c8757615c8761576b565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615cbb57615cbb61576b565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615cf957615cf961576b565b500290565b600082615d0d57615d0d615a86565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152615d5d60c0830184615580565b98975050505050505050565b805163ffffffff8116811461522557600080fd5b600060c08284031215615d8f57600080fd5b60405160c0810181811067ffffffffffffffff82111715615db257615db2615238565b604052615dbe83615d69565b81526020830151615dce816155f6565b60208201526040830151615de1816155f6565b6040820152615df260608401615d69565b6060820152615e0360808401615d69565b6080820152615e1460a084016157e8565b60a08201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615e5157615e5161576b565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680615e9a57615e9a615a86565b8060ff84160691505092915050565b600060ff821660ff841680821015615ec357615ec361576b565b90039392505050565b60008251615ede818460208701615554565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"; bytes internal constant l1CrossDomainMessengerCode = hex"60806040526004361061018b5760003560e01c80636425666b116100d6578063b1b1b2091161007f578063d764ad0b11610059578063d764ad0b1461049b578063db505d80146104ae578063ecc70428146104db57600080fd5b8063b1b1b2091461042b578063b28ade251461045b578063c0c53b8b1461047b57600080fd5b80638cbeeef2116100b05780638cbeeef2146102d05780639fce812c146103d0578063a4e7f8bd146103fb57600080fd5b80636425666b146103775780636e296e45146103a457806383a74074146103b957600080fd5b80633dbb202b1161013857806354fd4d501161011257806354fd4d50146102e65780635644cfdf1461033c5780635c975abb1461035257600080fd5b80633dbb202b146102935780633f827a5a146102a85780634c1d6a69146102d057600080fd5b80632828d7e8116101695780632828d7e81461022457806333d7e2bd1461023957806335e80ab31461026657600080fd5b8063028f85f7146101905780630c568498146101c35780630ff754ea146101d8575b600080fd5b34801561019c57600080fd5b506101a5601081565b60405167ffffffffffffffff90911681526020015b60405180910390f35b3480156101cf57600080fd5b506101a5603f81565b3480156101e457600080fd5b5060fc5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101ba565b34801561023057600080fd5b506101a5604081565b34801561024557600080fd5b5060fd546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561027257600080fd5b5060fb546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b6102a66102a1366004611bdf565b610540565b005b3480156102b457600080fd5b506102bd600181565b60405161ffff90911681526020016101ba565b3480156102dc57600080fd5b506101a5619c4081565b3480156102f257600080fd5b5061032f6040518060400160405280600581526020017f322e342e3000000000000000000000000000000000000000000000000000000081525081565b6040516101ba9190611cb1565b34801561034857600080fd5b506101a561138881565b34801561035e57600080fd5b5061036761083d565b60405190151581526020016101ba565b34801561038357600080fd5b5060fc546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156103b057600080fd5b506101ff6108d6565b3480156103c557600080fd5b506101a562030d4081565b3480156103dc57600080fd5b5060cf5473ffffffffffffffffffffffffffffffffffffffff166101ff565b34801561040757600080fd5b50610367610416366004611ccb565b60ce6020526000908152604090205460ff1681565b34801561043757600080fd5b50610367610446366004611ccb565b60cb6020526000908152604090205460ff1681565b34801561046757600080fd5b506101a5610476366004611ce4565b6109bd565b34801561048757600080fd5b506102a6610496366004611d38565b610a2b565b6102a66104a9366004611d83565b610ca2565b3480156104ba57600080fd5b5060cf546101ff9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104e757600080fd5b5061053260cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b6040519081526020016101ba565b6105486115d3565b156105e05734156105e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f642076616c7565207769746820637573746f6d2067617320746f6b656e00000060648201526084015b60405180910390fd5b60cf546107129073ffffffffffffffffffffffffffffffffffffffff166106088585856109bd565b347fd764ad0b0000000000000000000000000000000000000000000000000000000061067460cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b338a34898c8c6040516024016106909796959493929190611e52565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152611612565b8373ffffffffffffffffffffffffffffffffffffffff167fcb0f7ffd78f9aee47a248fae8db181db6eee833039123e026dcbff529522e52a33858561079760cd547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001790565b866040516107a9959493929190611eb1565b60405180910390a260405134815233907f8ebb2ec2465bdb2a06a66fc37a0963af8a2a6a1479d81d56fdb8cbb98096d5469060200160405180910390a2505060cd80547dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808216600101167fffff0000000000000000000000000000000000000000000000000000000000009091161790555050565b60fb54604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156108ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d19190611eff565b905090565b60cc5460009073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2153016109a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f43726f7373446f6d61696e4d657373656e6765723a2078446f6d61696e4d657360448201527f7361676553656e646572206973206e6f7420736574000000000000000000000060648201526084016105d7565b5060cc5473ffffffffffffffffffffffffffffffffffffffff1690565b6000611388619c4080603f6109d9604063ffffffff8816611f50565b6109e39190611f80565b6109ee601088611f50565b6109fb9062030d40611fce565b610a059190611fce565b610a0f9190611fce565b610a199190611fce565b610a239190611fce565b949350505050565b6000547501000000000000000000000000000000000000000000900460ff1615808015610a76575060005460017401000000000000000000000000000000000000000090910460ff16105b80610aa85750303b158015610aa8575060005474010000000000000000000000000000000000000000900460ff166001145b610b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105d7565b600080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790558015610bba57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff1675010000000000000000000000000000000000000000001790555b60fb805473ffffffffffffffffffffffffffffffffffffffff8087167fffffffffffffffffffffffff00000000000000000000000000000000000000009283161790925560fc805486841690831617905560fd805492851692909116919091179055610c397342000000000000000000000000000000000000076116ab565b8015610c9c57600080547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b610caa61083d565b15610d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f43726f7373446f6d61696e4d657373656e6765723a207061757365640000000060448201526064016105d7565b60f087901c60028110610dcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f43726f7373446f6d61696e4d657373656e6765723a206f6e6c7920766572736960448201527f6f6e2030206f722031206d657373616765732061726520737570706f7274656460648201527f20617420746869732074696d6500000000000000000000000000000000000000608482015260a4016105d7565b8061ffff16600003610ec1576000610e1d878986868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508f92506117e7915050565b600081815260cb602052604090205490915060ff1615610ebf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f43726f7373446f6d61696e4d657373656e6765723a206c65676163792077697460448201527f6864726177616c20616c72656164792072656c6179656400000000000000000060648201526084016105d7565b505b6000610f07898989898989898080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180692505050565b9050610f11611829565b15610f4957853414610f2557610f25611ffa565b600081815260ce602052604090205460ff1615610f4457610f44611ffa565b61109b565b3415610ffd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f43726f7373446f6d61696e4d657373656e6765723a2076616c7565206d75737460448201527f206265207a65726f20756e6c657373206d6573736167652069732066726f6d2060648201527f612073797374656d206164647265737300000000000000000000000000000000608482015260a4016105d7565b600081815260ce602052604090205460ff1661109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520636160448201527f6e6e6f74206265207265706c617965640000000000000000000000000000000060648201526084016105d7565b6110a487611905565b15611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f43726f7373446f6d61696e4d657373656e6765723a2063616e6e6f742073656e60448201527f64206d65737361676520746f20626c6f636b65642073797374656d206164647260648201527f6573730000000000000000000000000000000000000000000000000000000000608482015260a4016105d7565b600081815260cb602052604090205460ff16156111f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f43726f7373446f6d61696e4d657373656e6765723a206d65737361676520686160448201527f7320616c7265616479206265656e2072656c617965640000000000000000000060648201526084016105d7565b61121785611208611388619c40611fce565b67ffffffffffffffff1661194b565b158061123d575060cc5473ffffffffffffffffffffffffffffffffffffffff1661dead14155b1561135657600081815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555182917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff320161134f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b50506115ae565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8a1617905560006113e788619c405a6113aa9190612029565b8988888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061196992505050565b60cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790559050801561149d57600082815260cb602052604090205460ff161561143a5761143a611ffa565b600082815260cb602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f4641df4a962071e12719d8c8c8e5ac7fc4d97b927346a3d7a335b1f7517e133c91a26115aa565b600082815260ce602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790555183917f99d0e048484baa1b1540b1367cb128acd7ab2946d1ed91ec10e3c85e4bf51b8f91a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff32016115aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f43726f7373446f6d61696e4d657373656e6765723a206661696c656420746f2060448201527f72656c6179206d6573736167650000000000000000000000000000000000000060648201526084016105d7565b5050505b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000806115de611983565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b60fc546040517fe9e05c4200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063e9e05c42908490611673908890839089906000908990600401612040565b6000604051808303818588803b15801561168c57600080fd5b505af11580156116a0573d6000803e3d6000fd5b505050505050505050565b6000547501000000000000000000000000000000000000000000900460ff16611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105d7565b60cc5473ffffffffffffffffffffffffffffffffffffffff166117a05760cc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead1790555b60cf80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006117f585858585611a20565b805190602001209050949350505050565b6000611816878787878787611ab9565b8051906020012090509695505050505050565b60fc5460009073ffffffffffffffffffffffffffffffffffffffff16331480156108d1575060cf5460fc54604080517f9bf62d82000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691639bf62d82916004808201926020929091908290030181865afa1580156118c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e99190612098565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b600073ffffffffffffffffffffffffffffffffffffffff8216301480611945575060fc5473ffffffffffffffffffffffffffffffffffffffff8381169116145b92915050565b600080603f83619c4001026040850201603f5a021015949350505050565b600080600080845160208601878a8af19695505050505050565b60fd54604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a1791906120b5565b90939092509050565b606084848484604051602401611a3994939291906120f5565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fcbd4ece9000000000000000000000000000000000000000000000000000000001790529050949350505050565b6060868686868686604051602401611ad69695949392919061213f565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fd764ad0b0000000000000000000000000000000000000000000000000000000017905290509695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81168114611b7a57600080fd5b50565b60008083601f840112611b8f57600080fd5b50813567ffffffffffffffff811115611ba757600080fd5b602083019150836020828501011115611bbf57600080fd5b9250929050565b803563ffffffff81168114611bda57600080fd5b919050565b60008060008060608587031215611bf557600080fd5b8435611c0081611b58565b9350602085013567ffffffffffffffff811115611c1c57600080fd5b611c2887828801611b7d565b9094509250611c3b905060408601611bc6565b905092959194509250565b6000815180845260005b81811015611c6c57602081850181015186830182015201611c50565b81811115611c7e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611cc46020830184611c46565b9392505050565b600060208284031215611cdd57600080fd5b5035919050565b600080600060408486031215611cf957600080fd5b833567ffffffffffffffff811115611d1057600080fd5b611d1c86828701611b7d565b9094509250611d2f905060208501611bc6565b90509250925092565b600080600060608486031215611d4d57600080fd5b8335611d5881611b58565b92506020840135611d6881611b58565b91506040840135611d7881611b58565b809150509250925092565b600080600080600080600060c0888a031215611d9e57600080fd5b873596506020880135611db081611b58565b95506040880135611dc081611b58565b9450606088013593506080880135925060a088013567ffffffffffffffff811115611dea57600080fd5b611df68a828b01611b7d565b989b979a50959850939692959293505050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b878152600073ffffffffffffffffffffffffffffffffffffffff808916602084015280881660408401525085606083015263ffffffff8516608083015260c060a0830152611ea460c083018486611e09565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86168152608060208201526000611ee1608083018688611e09565b905083604083015263ffffffff831660608301529695505050505050565b600060208284031215611f1157600080fd5b81518015158114611cc457600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff80831681851681830481118215151615611f7757611f77611f21565b02949350505050565b600067ffffffffffffffff80841680611fc2577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600067ffffffffffffffff808316818516808303821115611ff157611ff1611f21565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b60008282101561203b5761203b611f21565b500390565b73ffffffffffffffffffffffffffffffffffffffff8616815284602082015267ffffffffffffffff84166040820152821515606082015260a06080820152600061208d60a0830184611c46565b979650505050505050565b6000602082840312156120aa57600080fd5b8151611cc481611b58565b600080604083850312156120c857600080fd5b82516120d381611b58565b602084015190925060ff811681146120ea57600080fd5b809150509250929050565b600073ffffffffffffffffffffffffffffffffffffffff80871683528086166020840152506080604083015261212e6080830185611c46565b905082606083015295945050505050565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261218a60c0830184611c46565b9897505050505050505056fea164736f6c634300080f000a"; bytes internal constant l2OutputOracleCode = From edbb9d14816921b8e978b415b6572791886244be Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 1 May 2024 22:29:01 -0600 Subject: [PATCH 33/45] lint: fix --- packages/contracts-bedrock/semver-lock.json | 8 ++++---- packages/contracts-bedrock/src/L1/OptimismPortal.sol | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index ea0ed205ee0..13aebaec0df 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -25,15 +25,15 @@ }, "src/L1/L1StandardBridge.sol": { "initCodeHash": "0xa00156c877db0317663816dfa1ae124088e3620c0f1bc6ebfb41bf79c6df07dd", - "sourceCodeHash": "0x20cab6f2c61695d682be5a397dce471232dc19e729366430aa721c6afb74e71d" + "sourceCodeHash": "0x0d07e526c1891abb81c7e94f73642caa8ee386ab036b3b2a67f1b21ca85089c5" }, "src/L1/L2OutputOracle.sol": { "initCodeHash": "0x14c3a582ca46ef2a6abad5590323f4de26ff4de54415c927c62e131ccbf8d9ba", "sourceCodeHash": "0xf5fcf570721e25459fadbb37e02f9efe349e1c8afcbf1e3b5fdb09c9f612cdc0" }, "src/L1/OptimismPortal.sol": { - "initCodeHash": "0x25333335a13efe9262c1e4cc62ba559decc730027979a515dfc848a03193162f", - "sourceCodeHash": "0x3802c523568f23c5d6574840c74cdee7bc0a487b76056b6f3d1455e3fec1a173" + "initCodeHash": "0x8ca0ac98c37ad221d679c744b295b1b38742bfebac050f789197d658951709f5", + "sourceCodeHash": "0xecaabf75adc0351dfc79139664ac54731a4ec6cfda9c1c50e58105ee1d4d157e" }, "src/L1/OptimismPortal2.sol": { "initCodeHash": "0xea32d79e8297956d4f9a4c7985bb53ff8bb3735e5b307d4e118fea71f503a38e", @@ -65,7 +65,7 @@ }, "src/L2/L1Block.sol": { "initCodeHash": "0x00961e82f3ed7f7755115c897304063e283bff0bed1200d50e0abe5c59424069", - "sourceCodeHash": "0x9a68dd1bb833ebe1b40aa53f98b8de590bf16d2a555fd7017587ade9ed6b19d4" + "sourceCodeHash": "0x9c19260697d5ed5f85318098dead3f5882d77f1ee87233da1b47d1e87c88bce8" }, "src/L2/L1BlockInterop.sol": { "initCodeHash": "0x2929683ae3e4f76fca87462f0217b6e24c418bc964328f8d095f0e90343d2cae", diff --git a/packages/contracts-bedrock/src/L1/OptimismPortal.sol b/packages/contracts-bedrock/src/L1/OptimismPortal.sol index 643c5cf2824..68daf149fe8 100644 --- a/packages/contracts-bedrock/src/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/src/L1/OptimismPortal.sol @@ -569,10 +569,10 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { Predeploys.L1_BLOCK_ATTRIBUTES, DEPOSIT_VERSION, abi.encodePacked( - uint256(0), // mint - uint256(0), // value + uint256(0), // mint + uint256(0), // value uint64(SYSTEM_DEPOSIT_GAS_LIMIT), // gasLimit - false, // isCreation, + false, // isCreation, abi.encodeCall(L1Block.setGasPayingToken, (_token, _decimals, _name, _symbol)) ) ); From 8116111d864f617772fb608d4713936ef3f6f04f Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 1 May 2024 22:18:42 -0600 Subject: [PATCH 34/45] contracts-bedrock: clean up semantics of cgt Custom gas token semantics are strengthened and cleaned up to ensure invariants in spec are held true. --- .../src/L2/L2StandardBridge.sol | 3 ++ .../src/universal/StandardBridge.sol | 2 + .../test/L2/L2StandardBridge.t.sol | 51 +++++++++++++------ 3 files changed, 40 insertions(+), 16 deletions(-) diff --git a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol index d001a540a42..e633fda2ee0 100644 --- a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol +++ b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol @@ -100,6 +100,7 @@ contract L2StandardBridge is StandardBridge, ISemver { virtual onlyEOA { + require(isCustomGasToken() == false, "L2StandardBridge: not supported with custom gas token"); _initiateWithdrawal(_l2Token, msg.sender, msg.sender, _amount, _minGasLimit, _extraData); } @@ -127,6 +128,7 @@ contract L2StandardBridge is StandardBridge, ISemver { payable virtual { + require(isCustomGasToken() == false, "L2StandardBridge: not supported with custom gas token"); _initiateWithdrawal(_l2Token, msg.sender, _to, _amount, _minGasLimit, _extraData); } @@ -151,6 +153,7 @@ contract L2StandardBridge is StandardBridge, ISemver { payable virtual { + require(isCustomGasToken() == false, "L2StandardBridge: not supported with custom gas token"); if (_l1Token == address(0) && _l2Token == Predeploys.LEGACY_ERC20_ETH) { finalizeBridgeETH(_from, _to, _amount, _extraData); } else { diff --git a/packages/contracts-bedrock/src/universal/StandardBridge.sol b/packages/contracts-bedrock/src/universal/StandardBridge.sol index 903e9730a0f..140aba531e6 100644 --- a/packages/contracts-bedrock/src/universal/StandardBridge.sol +++ b/packages/contracts-bedrock/src/universal/StandardBridge.sol @@ -355,6 +355,8 @@ abstract contract StandardBridge is Initializable { ) internal { + require(msg.value == 0, "StandardBridge: cannot send value"); + if (_isOptimismMintableERC20(_localToken)) { require( _isCorrectTokenPair(_localToken, _remoteToken), diff --git a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol index 34d40e293a5..1aa7218e0e4 100644 --- a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol @@ -153,22 +153,49 @@ contract L2StandardBridge_Test is Bridge_Initializer { l2StandardBridge.withdraw{ value: 1 }(address(Predeploys.LEGACY_ERC20_ETH), 100, 1, hex""); } + /// @dev Tests that `withdraw` reverts when sending value and attempting to withdraw + /// an ERC20 token. This prevents ether from being stuck in the contract. + function test_withdraw_erc20WithValue_reverts() external { + vm.deal(alice, 100); + vm.expectRevert("StandardBridge: cannot send value"); + vm.prank(alice, alice); + l2StandardBridge.withdraw{ value: 100 }(address(L2Token), 100, 1, hex""); + } + /// @dev Tests that `withdraw` reverts with custom gas token. function test_withdraw_customGasToken_reverts() external { - vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); - vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18))); + vm.expectRevert("L2StandardBridge: not supported with custom gas token"); vm.prank(alice, alice); l2StandardBridge.withdraw(address(Predeploys.LEGACY_ERC20_ETH), 1, 1, hex""); } + /// @dev Tests that `withdraw` with value reverts with custom gas token. + function test_withdraw_customGasTokenWithValue_reverts() external { + vm.deal(alice, 1 ether); + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18))); + vm.expectRevert("L2StandardBridge: not supported with custom gas token"); + vm.prank(alice, alice); + l2StandardBridge.withdraw{ value: 1 ether }(address(Predeploys.LEGACY_ERC20_ETH), 1, 1, hex""); + } + /// @dev Tests that `withdrawTo` reverts with custom gas token. function test_withdrawTo_customGasToken_reverts() external { - vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); - vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18))); + vm.expectRevert("L2StandardBridge: not supported with custom gas token"); vm.prank(alice, alice); l2StandardBridge.withdrawTo(address(Predeploys.LEGACY_ERC20_ETH), bob, 1, 1, hex""); } + /// @dev Tests that `withdrawTo` with value reverts with custom gas token. + function test_withdrawTo_customGasTokenWithValue_reverts() external { + vm.deal(alice, 1 ether); + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18))); + vm.expectRevert("L2StandardBridge: not supported with custom gas token"); + vm.prank(alice, alice); + l2StandardBridge.withdrawTo{ value: 1 ether }(address(Predeploys.LEGACY_ERC20_ETH), bob, 1, 1, hex""); + } + /// @dev Tests that the legacy `withdraw` interface on the L2StandardBridge /// successfully initiates a withdrawal. function test_withdraw_ether_succeeds() external { @@ -475,8 +502,8 @@ contract L2StandardBridge_Bridge_Test is Bridge_Initializer { } /// @dev Tests that `finalizeDeposit` succeeds when depositing ERC20 with custom gas token. - function test_finalizeDeposit_depositingERC20_customGasToken_succeeds() external { - vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(2))); + function test_finalizeDeposit_depositingERC20_customGasToken_reverts() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18))); vm.mockCall( address(l2StandardBridge.messenger()), @@ -484,15 +511,7 @@ contract L2StandardBridge_Bridge_Test is Bridge_Initializer { abi.encode(address(l2StandardBridge.OTHER_BRIDGE())) ); - vm.expectCall(address(L2Token), abi.encodeWithSelector(OptimismMintableERC20.mint.selector, alice, 100)); - - // Should emit both the bedrock and legacy events - vm.expectEmit(address(l2StandardBridge)); - emit DepositFinalized(address(L1Token), address(L2Token), alice, alice, 100, hex""); - - vm.expectEmit(address(l2StandardBridge)); - emit ERC20BridgeFinalized(address(L2Token), address(L1Token), alice, alice, 100, hex""); - + vm.expectRevert("L2StandardBridge: not supported with custom gas token"); vm.prank(address(l2CrossDomainMessenger)); l2StandardBridge.finalizeDeposit(address(L1Token), address(L2Token), alice, alice, 100, hex""); } @@ -528,7 +547,7 @@ contract L2StandardBridge_Bridge_Test is Bridge_Initializer { abi.encode(address(l2StandardBridge.OTHER_BRIDGE())) ); vm.prank(address(l2CrossDomainMessenger)); - vm.expectRevert("StandardBridge: cannot bridge ETH with custom gas token"); + vm.expectRevert("L2StandardBridge: not supported with custom gas token"); l2StandardBridge.finalizeDeposit(address(0), Predeploys.LEGACY_ERC20_ETH, alice, alice, 100, hex""); } From 8f55a2be689357849ae16937ef188d0ce92ddcc9 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 1 May 2024 22:24:34 -0600 Subject: [PATCH 35/45] snapshots: regenerate --- .../snapshots/state-diff/Kontrol-Deploy.json | 114 +++++++++--------- .../proofs/utils/DeploymentSummary.sol | 4 +- .../proofs/utils/DeploymentSummaryCode.sol | 2 +- 3 files changed, 60 insertions(+), 60 deletions(-) diff --git a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json index 173343eb6d6..75443fe7d47 100644 --- a/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json +++ b/packages/contracts-bedrock/snapshots/state-diff/Kontrol-Deploy.json @@ -5373,7 +5373,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f21806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", + "data": "0x638627e586f5e36fe67a77519503a7c6da22f92b150d3c6055fd40bdcfe9ffd160806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612faf806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612993565b6105b8565b61023b610270366004612a44565b6109d2565b61023b610283366004612a97565b610aa9565b61023b610296366004612a97565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612b0a565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612bf7565b3480156103ce57600080fd5b5061023b6103dd366004612c0a565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612b0a565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612c0a565b611212565b34801561047e57600080fd5b506104aa61048d366004612c8d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612cc6565b6112e6565b34801561050257600080fd5b5061023b610511366004612993565b611328565b61023b610524366004612a44565b611337565b34801561053557600080fd5b5061023b610544366004612d29565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612cc6565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612dc0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201292505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612dd7565b905090565b6109c987873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201292505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010612021565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461210b565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612df9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612e42565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b630000000000000000000000000000000000000000000000000000000061217e565b806119055750611905827fec4fc8e30000000000000000000000000000000000000000000000000000000061217e565b92915050565b6000611937837f1d1d8b630000000000000000000000000000000000000000000000000000000061217e565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612d74565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526121a1565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612e87565b60405180910390a46110138686868686866122ad565b600080611b98612335565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612ec5565b60405180910390a36105b2848484846123d2565b600080600080845160208601878a8af19695505050505050565b3415611ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5374616e646172644272696467653a2063616e6e6f742073656e642076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610214565b611cf0876118a9565b15611e3e57611cff878761190b565b611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e2157600080fd5b505af1158015611e35573d6000803e3d6000fd5b50505050611ed2565b611e6073ffffffffffffffffffffffffffffffffffffffff881686308661243f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e9e908490612ede565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611ee087878787878661249d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611f44908b908d908c908c908c908b90602401612ef6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611fd792918790600401612e42565b600060405180830381600087803b158015611ff157600080fd5b505af1158015612005573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff166120b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161216a929190612ec5565b60405180910390a36105b28484848461252b565b60006121898361258a565b801561219a575061219a83836125ee565b9392505050565b6000612203826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126bd9092919063ffffffff16565b805190915015610aa457808060200190518101906122219190612dd7565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161232593929190612e87565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156123a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c99190612f51565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612431929190612ec5565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161251593929190612e87565b60405180910390a46110138686868686866126d4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612431929190612ec5565b60006125b6827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ee565b801561190557506125e7827fffffffff000000000000000000000000000000000000000000000000000000006125ee565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156126a6575060208210155b80156126b25750600081115b979650505050505050565b60606126cc848460008561274c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161232593929190612e87565b6060824710156127de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b61285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128859190612f86565b60006040518083038185875af1925050503d80600081146128c2576040519150601f19603f3d011682016040523d82523d6000602084013e6128c7565b606091505b50915091506126b2828286606083156128e157508161219a565b8251156128f15782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612bf7565b73ffffffffffffffffffffffffffffffffffffffff8116811461294757600080fd5b50565b60008083601f84011261295c57600080fd5b50813567ffffffffffffffff81111561297457600080fd5b60208301915083602082850101111561298c57600080fd5b9250929050565b600080600080600080600060c0888a0312156129ae57600080fd5b87356129b981612925565b965060208801356129c981612925565b955060408801356129d981612925565b945060608801356129e981612925565b93506080880135925060a088013567ffffffffffffffff811115612a0c57600080fd5b612a188a828b0161294a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a3f57600080fd5b919050565b600080600060408486031215612a5957600080fd5b612a6284612a2b565b9250602084013567ffffffffffffffff811115612a7e57600080fd5b612a8a8682870161294a565b9497909650939450505050565b600080600080600060808688031215612aaf57600080fd5b8535612aba81612925565b94506020860135612aca81612925565b935060408601359250606086013567ffffffffffffffff811115612aed57600080fd5b612af98882890161294a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b2557600080fd5b8735612b3081612925565b96506020880135612b4081612925565b95506040880135612b5081612925565b945060608801359350612b6560808901612a2b565b925060a088013567ffffffffffffffff811115612a0c57600080fd5b60005b83811015612b9c578181015183820152602001612b84565b838111156105b25750506000910152565b60008151808452612bc5816020860160208601612b81565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061219a6020830184612bad565b60008060008060008060a08789031215612c2357600080fd5b8635612c2e81612925565b95506020870135612c3e81612925565b945060408701359350612c5360608801612a2b565b9250608087013567ffffffffffffffff811115612c6f57600080fd5b612c7b89828a0161294a565b979a9699509497509295939492505050565b60008060408385031215612ca057600080fd5b8235612cab81612925565b91506020830135612cbb81612925565b809150509250929050565b60008060008060608587031215612cdc57600080fd5b8435612ce781612925565b9350612cf560208601612a2b565b9250604085013567ffffffffffffffff811115612d1157600080fd5b612d1d8782880161294a565b95989497509550505050565b600080600060608486031215612d3e57600080fd5b8335612d4981612925565b92506020840135612d5981612925565b91506040840135612d6981612925565b809150509250925092565b600060208284031215612d8657600080fd5b815161219a81612925565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612dd257612dd2612d91565b500390565b600060208284031215612de957600080fd5b8151801515811461219a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e386080830184612bad565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e716060830185612bad565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ebc6060830184612bad565b95945050505050565b8281526040602082015260006126cc6040830184612bad565b60008219821115612ef157612ef1612d91565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f4560c0830184612bad565b98975050505050505050565b60008060408385031215612f6457600080fd5b8251612f6f81612925565b602084015190925060ff81168114612cbb57600080fd5b60008251612f98818460208701612b81565b919091019291505056fea164736f6c634300080f000a", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -5385,13 +5385,13 @@ }, { "accessor": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 }, - "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612f21806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", - "deployedCode": "0x6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a", + "data": "0x60806040523480156200001157600080fd5b50620000206000808062000026565b6200024b565b600054610100900460ff1615808015620000475750600054600160ff909116105b806200007757506200006430620001a160201b620005891760201c565b15801562000077575060005460ff166001145b620000e05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000104576000805461ff0019166101001790555b603280546001600160a01b038086166001600160a01b03199283161790925560338054928516929091169190911790556200015484734200000000000000000000000000000000000010620001b0565b80156200019b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6001600160a01b03163b151590565b600054610100900460ff166200021d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401620000d7565b600380546001600160a01b039384166001600160a01b03199182161790915560048054929093169116179055565b612faf806200025b6000396000f3fe6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612993565b6105b8565b61023b610270366004612a44565b6109d2565b61023b610283366004612a97565b610aa9565b61023b610296366004612a97565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612b0a565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612bf7565b3480156103ce57600080fd5b5061023b6103dd366004612c0a565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612b0a565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612c0a565b611212565b34801561047e57600080fd5b506104aa61048d366004612c8d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612cc6565b6112e6565b34801561050257600080fd5b5061023b610511366004612993565b611328565b61023b610524366004612a44565b611337565b34801561053557600080fd5b5061023b610544366004612d29565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612cc6565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612dc0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201292505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612dd7565b905090565b6109c987873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201292505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010612021565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461210b565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612df9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612e42565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b630000000000000000000000000000000000000000000000000000000061217e565b806119055750611905827fec4fc8e30000000000000000000000000000000000000000000000000000000061217e565b92915050565b6000611937837f1d1d8b630000000000000000000000000000000000000000000000000000000061217e565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612d74565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526121a1565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612e87565b60405180910390a46110138686868686866122ad565b600080611b98612335565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612ec5565b60405180910390a36105b2848484846123d2565b600080600080845160208601878a8af19695505050505050565b3415611ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5374616e646172644272696467653a2063616e6e6f742073656e642076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610214565b611cf0876118a9565b15611e3e57611cff878761190b565b611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e2157600080fd5b505af1158015611e35573d6000803e3d6000fd5b50505050611ed2565b611e6073ffffffffffffffffffffffffffffffffffffffff881686308661243f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e9e908490612ede565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611ee087878787878661249d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611f44908b908d908c908c908c908b90602401612ef6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611fd792918790600401612e42565b600060405180830381600087803b158015611ff157600080fd5b505af1158015612005573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff166120b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161216a929190612ec5565b60405180910390a36105b28484848461252b565b60006121898361258a565b801561219a575061219a83836125ee565b9392505050565b6000612203826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126bd9092919063ffffffff16565b805190915015610aa457808060200190518101906122219190612dd7565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161232593929190612e87565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156123a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c99190612f51565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612431929190612ec5565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161251593929190612e87565b60405180910390a46110138686868686866126d4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612431929190612ec5565b60006125b6827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ee565b801561190557506125e7827fffffffff000000000000000000000000000000000000000000000000000000006125ee565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156126a6575060208210155b80156126b25750600081115b979650505050505050565b60606126cc848460008561274c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161232593929190612e87565b6060824710156127de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b61285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128859190612f86565b60006040518083038185875af1925050503d80600081146128c2576040519150601f19603f3d011682016040523d82523d6000602084013e6128c7565b606091505b50915091506126b2828286606083156128e157508161219a565b8251156128f15782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612bf7565b73ffffffffffffffffffffffffffffffffffffffff8116811461294757600080fd5b50565b60008083601f84011261295c57600080fd5b50813567ffffffffffffffff81111561297457600080fd5b60208301915083602082850101111561298c57600080fd5b9250929050565b600080600080600080600060c0888a0312156129ae57600080fd5b87356129b981612925565b965060208801356129c981612925565b955060408801356129d981612925565b945060608801356129e981612925565b93506080880135925060a088013567ffffffffffffffff811115612a0c57600080fd5b612a188a828b0161294a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a3f57600080fd5b919050565b600080600060408486031215612a5957600080fd5b612a6284612a2b565b9250602084013567ffffffffffffffff811115612a7e57600080fd5b612a8a8682870161294a565b9497909650939450505050565b600080600080600060808688031215612aaf57600080fd5b8535612aba81612925565b94506020860135612aca81612925565b935060408601359250606086013567ffffffffffffffff811115612aed57600080fd5b612af98882890161294a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b2557600080fd5b8735612b3081612925565b96506020880135612b4081612925565b95506040880135612b5081612925565b945060608801359350612b6560808901612a2b565b925060a088013567ffffffffffffffff811115612a0c57600080fd5b60005b83811015612b9c578181015183820152602001612b84565b838111156105b25750506000910152565b60008151808452612bc5816020860160208601612b81565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061219a6020830184612bad565b60008060008060008060a08789031215612c2357600080fd5b8635612c2e81612925565b95506020870135612c3e81612925565b945060408701359350612c5360608801612a2b565b9250608087013567ffffffffffffffff811115612c6f57600080fd5b612c7b89828a0161294a565b979a9699509497509295939492505050565b60008060408385031215612ca057600080fd5b8235612cab81612925565b91506020830135612cbb81612925565b809150509250929050565b60008060008060608587031215612cdc57600080fd5b8435612ce781612925565b9350612cf560208601612a2b565b9250604085013567ffffffffffffffff811115612d1157600080fd5b612d1d8782880161294a565b95989497509550505050565b600080600060608486031215612d3e57600080fd5b8335612d4981612925565b92506020840135612d5981612925565b91506040840135612d6981612925565b809150509250925092565b600060208284031215612d8657600080fd5b815161219a81612925565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612dd257612dd2612d91565b500390565b600060208284031215612de957600080fd5b8151801515811461219a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e386080830184612bad565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e716060830185612bad565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ebc6060830184612bad565b95945050505050565b8281526040602082015260006126cc6040830184612bad565b60008219821115612ef157612ef1612d91565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f4560c0830184612bad565b98975050505050505050565b60008060408385031215612f6457600080fd5b8251612f6f81612925565b602084015190925060ff81168114612cbb57600080fd5b60008251612f98818460208701612b81565b919091019291505056fea164736f6c634300080f000a", + "deployedCode": "0x6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612993565b6105b8565b61023b610270366004612a44565b6109d2565b61023b610283366004612a97565b610aa9565b61023b610296366004612a97565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612b0a565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612bf7565b3480156103ce57600080fd5b5061023b6103dd366004612c0a565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612b0a565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612c0a565b611212565b34801561047e57600080fd5b506104aa61048d366004612c8d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612cc6565b6112e6565b34801561050257600080fd5b5061023b610511366004612993565b611328565b61023b610524366004612a44565b611337565b34801561053557600080fd5b5061023b610544366004612d29565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612cc6565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612dc0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201292505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612dd7565b905090565b6109c987873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201292505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010612021565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461210b565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612df9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612e42565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b630000000000000000000000000000000000000000000000000000000061217e565b806119055750611905827fec4fc8e30000000000000000000000000000000000000000000000000000000061217e565b92915050565b6000611937837f1d1d8b630000000000000000000000000000000000000000000000000000000061217e565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612d74565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526121a1565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612e87565b60405180910390a46110138686868686866122ad565b600080611b98612335565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612ec5565b60405180910390a36105b2848484846123d2565b600080600080845160208601878a8af19695505050505050565b3415611ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5374616e646172644272696467653a2063616e6e6f742073656e642076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610214565b611cf0876118a9565b15611e3e57611cff878761190b565b611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e2157600080fd5b505af1158015611e35573d6000803e3d6000fd5b50505050611ed2565b611e6073ffffffffffffffffffffffffffffffffffffffff881686308661243f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e9e908490612ede565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611ee087878787878661249d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611f44908b908d908c908c908c908b90602401612ef6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611fd792918790600401612e42565b600060405180830381600087803b158015611ff157600080fd5b505af1158015612005573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff166120b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161216a929190612ec5565b60405180910390a36105b28484848461252b565b60006121898361258a565b801561219a575061219a83836125ee565b9392505050565b6000612203826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126bd9092919063ffffffff16565b805190915015610aa457808060200190518101906122219190612dd7565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161232593929190612e87565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156123a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c99190612f51565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612431929190612ec5565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161251593929190612e87565b60405180910390a46110138686868686866126d4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612431929190612ec5565b60006125b6827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ee565b801561190557506125e7827fffffffff000000000000000000000000000000000000000000000000000000006125ee565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156126a6575060208210155b80156126b25750600081115b979650505050505050565b60606126cc848460008561274c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161232593929190612e87565b6060824710156127de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b61285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128859190612f86565b60006040518083038185875af1925050503d80600081146128c2576040519150601f19603f3d011682016040523d82523d6000602084013e6128c7565b606091505b50915091506126b2828286606083156128e157508161219a565b8251156128f15782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612bf7565b73ffffffffffffffffffffffffffffffffffffffff8116811461294757600080fd5b50565b60008083601f84011261295c57600080fd5b50813567ffffffffffffffff81111561297457600080fd5b60208301915083602082850101111561298c57600080fd5b9250929050565b600080600080600080600060c0888a0312156129ae57600080fd5b87356129b981612925565b965060208801356129c981612925565b955060408801356129d981612925565b945060608801356129e981612925565b93506080880135925060a088013567ffffffffffffffff811115612a0c57600080fd5b612a188a828b0161294a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a3f57600080fd5b919050565b600080600060408486031215612a5957600080fd5b612a6284612a2b565b9250602084013567ffffffffffffffff811115612a7e57600080fd5b612a8a8682870161294a565b9497909650939450505050565b600080600080600060808688031215612aaf57600080fd5b8535612aba81612925565b94506020860135612aca81612925565b935060408601359250606086013567ffffffffffffffff811115612aed57600080fd5b612af98882890161294a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b2557600080fd5b8735612b3081612925565b96506020880135612b4081612925565b95506040880135612b5081612925565b945060608801359350612b6560808901612a2b565b925060a088013567ffffffffffffffff811115612a0c57600080fd5b60005b83811015612b9c578181015183820152602001612b84565b838111156105b25750506000910152565b60008151808452612bc5816020860160208601612b81565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061219a6020830184612bad565b60008060008060008060a08789031215612c2357600080fd5b8635612c2e81612925565b95506020870135612c3e81612925565b945060408701359350612c5360608801612a2b565b9250608087013567ffffffffffffffff811115612c6f57600080fd5b612c7b89828a0161294a565b979a9699509497509295939492505050565b60008060408385031215612ca057600080fd5b8235612cab81612925565b91506020830135612cbb81612925565b809150509250929050565b60008060008060608587031215612cdc57600080fd5b8435612ce781612925565b9350612cf560208601612a2b565b9250604085013567ffffffffffffffff811115612d1157600080fd5b612d1d8782880161294a565b95989497509550505050565b600080600060608486031215612d3e57600080fd5b8335612d4981612925565b92506020840135612d5981612925565b91506040840135612d6981612925565b809150509250925092565b600060208284031215612d8657600080fd5b815161219a81612925565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612dd257612dd2612d91565b500390565b600060208284031215612de957600080fd5b8151801515811461219a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e386080830184612bad565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e716060830185612bad565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ebc6060830184612bad565b95945050505050565b8281526040602082015260006126cc6040830184612bad565b60008219821115612ef157612ef1612d91565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f4560c0830184612bad565b98975050505050505050565b60008060408385031215612f6457600080fd5b8251612f6f81612925565b602084015190925060ff81168114612cbb57600080fd5b60008251612f98818460208701612b81565b919091019291505056fea164736f6c634300080f000a", "initialized": true, "kind": "Create", "newBalance": 0, @@ -5399,7 +5399,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5407,7 +5407,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5415,7 +5415,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5423,7 +5423,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5431,7 +5431,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5439,7 +5439,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000001", @@ -5447,7 +5447,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5455,7 +5455,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5463,7 +5463,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000032" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5471,7 +5471,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5479,7 +5479,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000033" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5487,7 +5487,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5495,7 +5495,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5503,7 +5503,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000003" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5511,7 +5511,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": true, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5519,7 +5519,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000004" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000101", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5527,7 +5527,7 @@ "slot": "0x0000000000000000000000000000000000000000000000000000000000000000" }, { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": true, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000001", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000101", @@ -5556,7 +5556,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5570,7 +5570,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5582,7 +5582,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5596,7 +5596,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -5608,7 +5608,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5622,7 +5622,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5634,7 +5634,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5648,7 +5648,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000004200000000000000000000000000000000000010", "previousValue": "0x0000000000000000000000004200000000000000000000000000000000000010", @@ -5660,7 +5660,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -5674,7 +5674,7 @@ "reverted": false, "storageAccesses": [ { - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "isWrite": false, "newValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", @@ -7978,7 +7978,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa600000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8004,7 +8004,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", + "data": "0x6a761202000000000000000000000000db8cff278adccf9e9b5da745b44e754fc4ee3c7600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000001049623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa600000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000410000000000000000000000001804c8ab1f12e6bbf3894d4083f33e07309d1f3800000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "DelegateCall", @@ -8070,7 +8070,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa60000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e600000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", + "data": "0x9623609d0000000000000000000000000c8b5822b6e02cda722174f19a1439a7495a3fa600000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000064c0c53b8b00000000000000000000000020a42a5a785622c6ba2576b2d6e924aa82bfa11d000000000000000000000000deb1e9a6be7baf84208bb6e10ac9f9bbe1d708090000000000000000000000001c23a6d89f95ef3148bcda8e242cab145bf9c0e400000000000000000000000000000000000000000000000000000000", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8137,7 +8137,7 @@ "chainId": 31337, "forkId": 0 }, - "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "data": "0x9b0b0fda360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", "deployedCode": "0x", "initialized": true, "kind": "Call", @@ -8156,7 +8156,7 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": true, - "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "newValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", "previousValue": "0x0000000000000000000000000000000000000000000000000000000000000000", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" @@ -8234,8 +8234,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", - "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "newValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", + "previousValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8244,7 +8244,7 @@ }, { "accessor": "0xDB8cFf278adCCF9E9b5da745B44E754fC4EE3C76", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8466,8 +8466,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", - "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "newValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", + "previousValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8476,7 +8476,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8561,8 +8561,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", - "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "newValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", + "previousValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8571,7 +8571,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8665,8 +8665,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", - "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "newValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", + "previousValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8675,7 +8675,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8769,8 +8769,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", - "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "newValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", + "previousValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8779,7 +8779,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8873,8 +8873,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", - "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "newValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", + "previousValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8883,7 +8883,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 @@ -8977,8 +8977,8 @@ { "account": "0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6", "isWrite": false, - "newValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", - "previousValue": "0x0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6", + "newValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", + "previousValue": "0x00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f", "reverted": false, "slot": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" } @@ -8987,7 +8987,7 @@ }, { "accessor": "0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38", - "account": "0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6", + "account": "0x04c50B398Cd4182428E79f7186b7C919cF17e86F", "chainInfo": { "chainId": 31337, "forkId": 0 diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol index 66dc66b2bdb..9a89ca229d2 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummary.sol @@ -17,7 +17,7 @@ contract DeploymentSummary is DeploymentSummaryCode { address internal constant l1CrossDomainMessengerProxyAddress = 0x20A42a5a785622c6Ba2576B2D6e924aA82BFA11D; address internal constant l1ERC721BridgeAddress = 0x44637A4292E0CD2B17A55d5F6B2F05AFcAcD0586; address internal constant l1ERC721BridgeProxyAddress = 0xDeF3bca8c80064589E6787477FFa7Dd616B5574F; - address internal constant l1StandardBridgeAddress = 0x1870eE1cA086E5EC25C9F8786FE05a3deF3877e6; + address internal constant l1StandardBridgeAddress = 0x04c50B398Cd4182428E79f7186b7C919cF17e86F; address internal constant l1StandardBridgeProxyAddress = 0x0c8b5822b6e02CDa722174F19A1439A7495a3fA6; address internal constant l2OutputOracleAddress = 0x19652082F846171168Daf378C4fD3ee85a0D4A60; address internal constant l2OutputOracleProxyAddress = 0x8B71b41D4dBEb2b6821d44692d3fACAAf77480Bb; @@ -344,7 +344,7 @@ contract DeploymentSummary is DeploymentSummaryCode { value = hex"0000000000000000000000000000000000000000000000000000000000000005"; vm.store(systemOwnerSafeAddress, slot, value); slot = hex"360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc"; - value = hex"0000000000000000000000001870ee1ca086e5ec25c9f8786fe05a3def3877e6"; + value = hex"00000000000000000000000004c50b398cd4182428e79f7186b7c919cf17e86f"; vm.store(l1StandardBridgeProxyAddress, slot, value); slot = hex"0000000000000000000000000000000000000000000000000000000000000000"; value = hex"0000000000000000000000000000000000000000000000000000000000000001"; diff --git a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol index ac69e19bb87..7fc5065497d 100644 --- a/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol +++ b/packages/contracts-bedrock/test/kontrol/proofs/utils/DeploymentSummaryCode.sol @@ -43,7 +43,7 @@ contract DeploymentSummaryCode { bytes internal constant systemConfigCode = hex"608060405234801561001057600080fd5b50600436106102ad5760003560e01c80639b7d7f0a1161017b578063e0e2016d116100d8578063f45e65d81161008c578063f8c68de011610071578063f8c68de014610661578063fd32aa0f14610669578063ffa1ad741461067157600080fd5b8063f45e65d814610644578063f68016b71461064d57600080fd5b8063e81b2c6d116100bd578063e81b2c6d14610620578063f2b4e61714610629578063f2fde38b1461063157600080fd5b8063e0e2016d14610610578063e2a3285c1461061857600080fd5b8063c71973f61161012f578063cc731b0211610114578063cc731b02146104cc578063d844471514610600578063dac6e63a1461060857600080fd5b8063c71973f6146104a6578063c9b26f61146104b957600080fd5b8063b40a817c11610160578063b40a817c14610483578063bc49ce5f14610496578063c4e8ddfa1461049e57600080fd5b80639b7d7f0a14610473578063a71198691461047b57600080fd5b806348cd4cb111610229578063550fcdc9116101dd578063715018a6116101c2578063715018a61461043a5780638da5cb5b14610442578063935f029e1461046057600080fd5b8063550fcdc91461042a5780635d73369c1461043257600080fd5b80634c1e843d1161020e5780634c1e843d146103a75780634f16540b146103ba57806354fd4d50146103e157600080fd5b806348cd4cb11461037e5780634add321d1461038657600080fd5b806318d13918116102805780631fd19ee1116102655780631fd19ee11461032857806321326849146103305780634397dfef1461034857600080fd5b806318d139181461030b57806319f5cea81461032057600080fd5b806306c92657146102b2578063078f29cf146102cd5780630a49cb03146102fa5780630c18c16214610302575b600080fd5b6102ba610679565b6040519081526020015b60405180910390f35b6102d56106a7565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102c4565b6102d56106e0565b6102ba60655481565b61031e610319366004611fc4565b610710565b005b6102ba610724565b6102d561074f565b610338610779565b60405190151581526020016102c4565b6103506107b8565b6040805173ffffffffffffffffffffffffffffffffffffffff909316835260ff9091166020830152016102c4565b6102ba6107cc565b61038e6107fc565b60405167ffffffffffffffff90911681526020016102c4565b61031e6103b5366004612137565b610822565b6102ba7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b61041d6040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b6040516102c491906122ec565b61041d610c2d565b6102ba610c37565b61031e610c62565b60335473ffffffffffffffffffffffffffffffffffffffff166102d5565b61031e61046e3660046122ff565b610c76565b6102d5610c8c565b6102d5610cbc565b61031e610491366004612321565b610cec565b6102ba610cfd565b6102d5610d28565b61031e6104b436600461233c565b610d58565b61031e6104c7366004612358565b610d69565b6105906040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516102c49190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b61041d610d7a565b6102d5610d84565b6102ba610db4565b6102ba610ddf565b6102ba60675481565b6102d5610e0a565b61031e61063f366004611fc4565b610e3a565b6102ba60665481565b60685461038e9067ffffffffffffffff1681565b6102ba610eee565b6102ba610f19565b6102ba600081565b6106a460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b81565b60006106db6106d760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b5490565b905090565b60006106db6106d760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b61071861117f565b61072181611200565b50565b6106a460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60006106db7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b6000806107846107b8565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b6000806107c3611102565b90939092509050565b60006106db6106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6069546000906106db9063ffffffff6a01000000000000000000008204811691166123b7565b600054610100900460ff16158080156108425750600054600160ff909116105b8061085c5750303b15801561085c575060005460ff166001145b6108ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561094b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6109536112bd565b61095c8a610e3a565b6109658761135c565b61096f8989611384565b61097886611415565b6109a17f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08869055565b6109d46109cf60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b849055565b610a08610a0260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b83519055565b610a3f610a3660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b60208401519055565b610a76610a6d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b60408401519055565b610aad610aa460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60608401519055565b610ae4610adb60017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b60808401519055565b610b1b610b1260017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60a08401519055565b610b236114f3565b610b308260c0015161155b565b610b3984611865565b610b416107fc565b67ffffffffffffffff168667ffffffffffffffff161015610bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b8015610c2157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b60606106db611cd9565b6106a460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610c6a61117f565b610c746000611d9a565b565b610c7e61117f565b610c888282611384565b5050565b60006106db6106d760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d6123a0565b60006106db6106d760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce95806376123a0565b610cf461117f565b61072181611415565b6106a460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b60006106db6106d760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a86123a0565b610d6061117f565b61072181611865565b610d7161117f565b6107218161135c565b60606106db611e11565b60006106db6106d760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc5986123a0565b6106a460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b6106a460017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b60006106db6106d760017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa9076123a0565b610e4261117f565b73ffffffffffffffffffffffffffffffffffffffff8116610ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016108e4565b61072181611d9a565b6106a460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad63776123a0565b6106a460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad6123a0565b9055565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000602082511115610ff8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f476173506179696e67546f6b656e3a20737472696e672063616e6e6f7420626560448201527f2067726561746572207468616e2033322062797465730000000000000000000060648201526084016108e4565b611001826110d9565b92915050565b61106d61103560017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b74ff000000000000000000000000000000000000000060a086901b1673ffffffffffffffffffffffffffffffffffffffff8716179055565b6110a061109b60017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b839055565b6110d36110ce60017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b829055565b50505050565b8051602181106110f15763ec92f9a36000526004601cfd5b9081015160209190910360031b1b90565b600080806111346106d760017f04adb1412b2ddc16fcc0d4538d5c8f07cf9c83abecc6b41f6f69037b708fbcec6123a0565b73ffffffffffffffffffffffffffffffffffffffff81169350905082611173575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee92601292509050565b60a081901c9150509091565b60335473ffffffffffffffffffffffffffffffffffffffff163314610c74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108e4565b6112297f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516112b191906122ec565b60405180910390a35050565b600054610100900460ff16611354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c74611ec7565b6067819055604080516020808201849052825180830390910181529082019091526000611280565b606582905560668190556040805160208101849052908101829052600090606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600160007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161140891906122ec565b60405180910390a3505050565b61141d6107fc565b67ffffffffffffffff168167ffffffffffffffff16101561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611280565b6115216106d760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b600003610c7457610c7461155660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a06123a0565b439055565b73ffffffffffffffffffffffffffffffffffffffff8116158015906115aa575073ffffffffffffffffffffffffffffffffffffffff811673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14155b80156115bb57506115b9610779565b155b1561072157601260ff168173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611610573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163491906123e3565b60ff16146116c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f53797374656d436f6e6669673a2062616420646563696d616c73206f6620676160448201527f7320706179696e6720746f6b656e00000000000000000000000000000000000060648201526084016108e4565b600061175f8273ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261175a9190810190612400565b610f64565b905060006117b18373ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611714573d6000803e3d6000fd5b90506117c08360128484611007565b6117c86106e0565b6040517f71cfaa3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff858116600483015260126024830152604482018590526064820184905291909116906371cfaa3f90608401600060405180830381600087803b15801561184857600080fd5b505af115801561185c573d6000803e3d6000fd5b50505050505050565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016108e4565b6001816040015160ff16116119ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016108e4565b6068546080820151825167ffffffffffffffff909216916119cd91906124cb565b63ffffffff161115611a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016108e4565b6000816020015160ff1611611ad2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016108e4565b8051602082015163ffffffff82169160ff90911690611af29082906124ea565b611afc9190612534565b63ffffffff1614611b8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016108e4565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60606000611ce5611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611d5e57505060408051808201909152600381527f4554480000000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017fa48b38a4b44951360fbdcbfaaeae5ed6ae92585412e9841b70ec72ed8cd057646123a0565b611f67565b91505090565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606000611e1d611102565b5090507fffffffffffffffffffffffff111111111111111111111111111111111111111273ffffffffffffffffffffffffffffffffffffffff821601611e9657505060408051808201909152600581527f4574686572000000000000000000000000000000000000000000000000000000602082015290565b611d94611d8f6106d760017f657c3582c29b3176614e3a33ddd1ec48352696a04e92b3c0566d72010fa8863d6123a0565b600054610100900460ff16611f5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016108e4565b610c7433611d9a565b60405160005b82811a15611f7d57600101611f6d565b80825260208201838152600082820152505060408101604052919050565b803573ffffffffffffffffffffffffffffffffffffffff81168114611fbf57600080fd5b919050565b600060208284031215611fd657600080fd5b611fdf82611f9b565b9392505050565b803567ffffffffffffffff81168114611fbf57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff8111828210171561205057612050611ffe565b60405290565b803563ffffffff81168114611fbf57600080fd5b60ff8116811461072157600080fd5b600060c0828403121561208b57600080fd5b60405160c0810181811067ffffffffffffffff821117156120ae576120ae611ffe565b6040529050806120bd83612056565b815260208301356120cd8161206a565b602082015260408301356120e08161206a565b60408201526120f160608401612056565b606082015261210260808401612056565b608082015260a08301356fffffffffffffffffffffffffffffffff8116811461212a57600080fd5b60a0919091015292915050565b6000806000806000806000806000898b0361028081121561215757600080fd5b6121608b611f9b565b995060208b0135985060408b0135975060608b0135965061218360808c01611fe6565b955061219160a08c01611f9b565b94506121a08c60c08d01612079565b93506121af6101808c01611f9b565b925060e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe60820112156121e157600080fd5b506121ea61202d565b6121f76101a08c01611f9b565b81526122066101c08c01611f9b565b60208201526122186101e08c01611f9b565b604082015261222a6102008c01611f9b565b606082015261223c6102208c01611f9b565b608082015261224e6102408c01611f9b565b60a08201526122606102608c01611f9b565b60c0820152809150509295985092959850929598565b60005b83811015612291578181015183820152602001612279565b838111156110d35750506000910152565b600081518084526122ba816020860160208601612276565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611fdf60208301846122a2565b6000806040838503121561231257600080fd5b50508035926020909101359150565b60006020828403121561233357600080fd5b611fdf82611fe6565b600060c0828403121561234e57600080fd5b611fdf8383612079565b60006020828403121561236a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156123b2576123b2612371565b500390565b600067ffffffffffffffff8083168185168083038211156123da576123da612371565b01949350505050565b6000602082840312156123f557600080fd5b8151611fdf8161206a565b60006020828403121561241257600080fd5b815167ffffffffffffffff8082111561242a57600080fd5b818401915084601f83011261243e57600080fd5b81518181111561245057612450611ffe565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561249657612496611ffe565b816040528281528760208487010111156124af57600080fd5b6124c0836020830160208801612276565b979650505050505050565b600063ffffffff8083168185168083038211156123da576123da612371565b600063ffffffff80841680612528577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff8083168185168183048111821515161561255757612557612371565b0294935050505056fea164736f6c634300080f000a"; bytes internal constant l1StandardBridgeCode = - hex"6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612905565b6105b8565b61023b6102703660046129b6565b6109d2565b61023b610283366004612a09565b610aa9565b61023b610296366004612a09565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612a7c565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612b69565b3480156103ce57600080fd5b5061023b6103dd366004612b7c565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612a7c565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612b7c565b611212565b34801561047e57600080fd5b506104aa61048d366004612bff565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612c38565b6112e6565b34801561050257600080fd5b5061023b610511366004612905565b611328565b61023b6105243660046129b6565b611337565b34801561053557600080fd5b5061023b610544366004612c9b565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612c38565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612d32565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612ce6565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612d49565b905090565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f8492505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010611f93565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461207d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612d6b565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612db4565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b806119055750611905827fec4fc8e3000000000000000000000000000000000000000000000000000000006120f0565b92915050565b6000611937837f1d1d8b63000000000000000000000000000000000000000000000000000000006120f0565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612ce6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612113565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612df9565b60405180910390a461101386868686868661221f565b600080611b986122a7565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612e37565b60405180910390a36105b284848484612344565b600080600080845160208601878a8af19695505050505050565b611c62876118a9565b15611db057611c71878761190b565b611d23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050611e44565b611dd273ffffffffffffffffffffffffffffffffffffffff88168630866123b1565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e10908490612e50565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611e5287878787878661240f565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611eb6908b908d908c908c908c908b90602401612e68565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611f4992918790600401612db4565b600060405180830381600087803b158015611f6357600080fd5b505af1158015611f77573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff1661202a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f2384846040516120dc929190612e37565b60405180910390a36105b28484848461249d565b60006120fb836124fc565b801561210c575061210c8383612560565b9392505050565b6000612175826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661262f9092919063ffffffff16565b805190915015610aa457808060200190518101906121939190612d49565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161229793929190612df9565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa158015612317573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233b9190612ec3565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d84846040516123a3929190612e37565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161248793929190612df9565b60405180910390a4611013868686868686612646565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af584846040516123a3929190612e37565b6000612528827f01ffc9a700000000000000000000000000000000000000000000000000000000612560565b80156119055750612559827fffffffff00000000000000000000000000000000000000000000000000000000612560565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015612618575060208210155b80156126245750600081115b979650505050505050565b606061263e84846000856126be565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161229793929190612df9565b606082471015612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b6127ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516127f79190612ef8565b60006040518083038185875af1925050503d8060008114612834576040519150601f19603f3d011682016040523d82523d6000602084013e612839565b606091505b50915091506126248282866060831561285357508161210c565b8251156128635782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612b69565b73ffffffffffffffffffffffffffffffffffffffff811681146128b957600080fd5b50565b60008083601f8401126128ce57600080fd5b50813567ffffffffffffffff8111156128e657600080fd5b6020830191508360208285010111156128fe57600080fd5b9250929050565b600080600080600080600060c0888a03121561292057600080fd5b873561292b81612897565b9650602088013561293b81612897565b9550604088013561294b81612897565b9450606088013561295b81612897565b93506080880135925060a088013567ffffffffffffffff81111561297e57600080fd5b61298a8a828b016128bc565b989b979a50959850939692959293505050565b803563ffffffff811681146129b157600080fd5b919050565b6000806000604084860312156129cb57600080fd5b6129d48461299d565b9250602084013567ffffffffffffffff8111156129f057600080fd5b6129fc868287016128bc565b9497909650939450505050565b600080600080600060808688031215612a2157600080fd5b8535612a2c81612897565b94506020860135612a3c81612897565b935060408601359250606086013567ffffffffffffffff811115612a5f57600080fd5b612a6b888289016128bc565b969995985093965092949392505050565b600080600080600080600060c0888a031215612a9757600080fd5b8735612aa281612897565b96506020880135612ab281612897565b95506040880135612ac281612897565b945060608801359350612ad76080890161299d565b925060a088013567ffffffffffffffff81111561297e57600080fd5b60005b83811015612b0e578181015183820152602001612af6565b838111156105b25750506000910152565b60008151808452612b37816020860160208601612af3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061210c6020830184612b1f565b60008060008060008060a08789031215612b9557600080fd5b8635612ba081612897565b95506020870135612bb081612897565b945060408701359350612bc56060880161299d565b9250608087013567ffffffffffffffff811115612be157600080fd5b612bed89828a016128bc565b979a9699509497509295939492505050565b60008060408385031215612c1257600080fd5b8235612c1d81612897565b91506020830135612c2d81612897565b809150509250929050565b60008060008060608587031215612c4e57600080fd5b8435612c5981612897565b9350612c676020860161299d565b9250604085013567ffffffffffffffff811115612c8357600080fd5b612c8f878288016128bc565b95989497509550505050565b600080600060608486031215612cb057600080fd5b8335612cbb81612897565b92506020840135612ccb81612897565b91506040840135612cdb81612897565b809150509250925092565b600060208284031215612cf857600080fd5b815161210c81612897565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d4457612d44612d03565b500390565b600060208284031215612d5b57600080fd5b8151801515811461210c57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612daa6080830184612b1f565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612de36060830185612b1f565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612e2e6060830184612b1f565b95945050505050565b82815260406020820152600061263e6040830184612b1f565b60008219821115612e6357612e63612d03565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612eb760c0830184612b1f565b98975050505050505050565b60008060408385031215612ed657600080fd5b8251612ee181612897565b602084015190925060ff81168114612c2d57600080fd5b60008251612f0a818460208701612af3565b919091019291505056fea164736f6c634300080f000a"; + hex"6080604052600436106101845760003560e01c80637f46ddb2116100d65780639a2ac6d51161007f578063c0c53b8b11610059578063c0c53b8b14610529578063c89701a214610549578063e11013dd1461057657600080fd5b80639a2ac6d5146104e3578063a9f9e675146104f6578063b1a1a8821461051657600080fd5b80638f601f66116100b05780638f601f661461047257806391c49bf814610407578063927ede2d146104b857600080fd5b80637f46ddb214610407578063838b252014610432578063870876231461045257600080fd5b806335e80ab31161013857806354fd4d501161011257806354fd4d501461036c57806358a997f6146103c25780635c975abb146103e257600080fd5b806335e80ab3146102f25780633cb747bf1461031f578063540abf731461034c57600080fd5b80631532ec34116101695780631532ec34146102755780631635f5fd1461028857806333d7e2bd1461029b57600080fd5b80630166a07a1461024257806309fc88431461026257600080fd5b3661023d57333b1561021d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f4100000000000000000060648201526084015b60405180910390fd5b61023b333362030d40604051806020016040528060008152506105a5565b005b600080fd5b34801561024e57600080fd5b5061023b61025d366004612993565b6105b8565b61023b610270366004612a44565b6109d2565b61023b610283366004612a97565b610aa9565b61023b610296366004612a97565b610abd565b3480156102a757600080fd5b506033546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156102fe57600080fd5b506032546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561032b57600080fd5b506003546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035857600080fd5b5061023b610367366004612b0a565b61101b565b34801561037857600080fd5b506103b56040518060400160405280600581526020017f322e322e3000000000000000000000000000000000000000000000000000000081525081565b6040516102e99190612bf7565b3480156103ce57600080fd5b5061023b6103dd366004612c0a565b611060565b3480156103ee57600080fd5b506103f7611134565b60405190151581526020016102e9565b34801561041357600080fd5b5060045473ffffffffffffffffffffffffffffffffffffffff166102c8565b34801561043e57600080fd5b5061023b61044d366004612b0a565b6111cd565b34801561045e57600080fd5b5061023b61046d366004612c0a565b611212565b34801561047e57600080fd5b506104aa61048d366004612c8d565b600260209081526000928352604080842090915290825290205481565b6040519081526020016102e9565b3480156104c457600080fd5b5060035473ffffffffffffffffffffffffffffffffffffffff166102c8565b61023b6104f1366004612cc6565b6112e6565b34801561050257600080fd5b5061023b610511366004612993565b611328565b61023b610524366004612a44565b611337565b34801561053557600080fd5b5061023b610544366004612d29565b611408565b34801561055557600080fd5b506004546102c89073ffffffffffffffffffffffffffffffffffffffff1681565b61023b610584366004612cc6565b611607565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6105b2848434858561164a565b50505050565b60035473ffffffffffffffffffffffffffffffffffffffff163314801561068b575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa15801561064f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106739190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b61073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610745611134565b156107ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b6107b5876118a9565b15610903576107c4878761190b565b610876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8581166004830152602482018590528816906340c10f1990604401600060405180830381600087803b1580156108e657600080fd5b505af11580156108fa573d6000803e3d6000fd5b50505050610985565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054610941908490612dc0565b73ffffffffffffffffffffffffffffffffffffffff8089166000818152600260209081526040808320948c1683529390529190912091909155610985908585611a2b565b6109c9878787878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611aff92505050565b50505050505050565b333b15610a61576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa43333348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b505050565b610ab68585858585610abd565b5050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1633148015610b90575060048054600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff938416949390921692636e296e459282820192602092908290030181865afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190612d74565b73ffffffffffffffffffffffffffffffffffffffff16145b610c42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20746865206f7468657220627269646760648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a401610214565b610c4a611134565b15610cb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616e646172644272696467653a20706175736564000000000000000000006044820152606401610214565b610cb9611b8d565b15610d46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b823414610dd5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f5374616e646172644272696467653a20616d6f756e742073656e7420646f657360448201527f206e6f74206d6174636820616d6f756e742072657175697265640000000000006064820152608401610214565b3073ffffffffffffffffffffffffffffffffffffffff851603610e7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f207360448201527f656c6600000000000000000000000000000000000000000000000000000000006064820152608401610214565b60035473ffffffffffffffffffffffffffffffffffffffff90811690851603610f25576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f5374616e646172644272696467653a2063616e6e6f742073656e6420746f206d60448201527f657373656e6765720000000000000000000000000000000000000000000000006064820152608401610214565b610f6785858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611bcc92505050565b6000610f84855a8660405180602001604052806000815250611c3f565b905080611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f5374616e646172644272696467653a20455448207472616e736665722066616960448201527f6c656400000000000000000000000000000000000000000000000000000000006064820152608401610214565b505050505050565b6109c987873388888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b333b156110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201292505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c89190612dd7565b905090565b6109c987873388888888888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061201292505050565b333b156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b61101386863333888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c5992505050565b6105b233858585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b6109c9878787878787876105b8565b333b156113c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642066726f6d20616e20454f410000000000000000006064820152608401610214565b610aa433338585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506105a592505050565b600054610100900460ff16158080156114285750600054600160ff909116105b806114425750303b158015611442575060005460ff166001145b6114ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610214565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561152c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6032805473ffffffffffffffffffffffffffffffffffffffff8086167fffffffffffffffffffffffff000000000000000000000000000000000000000092831617909255603380549285169290911691909117905561159f84734200000000000000000000000000000000000010612021565b80156105b257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b6105b23385348686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061164a92505050565b611652611b8d565b156116df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f5374616e646172644272696467653a2063616e6e6f742062726964676520455460448201527f48207769746820637573746f6d2067617320746f6b656e0000000000000000006064820152608401610214565b82341461176e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5374616e646172644272696467653a206272696467696e6720455448206d757360448201527f7420696e636c7564652073756666696369656e74204554482076616c756500006064820152608401610214565b61177a8585858461210b565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9287929116907f1635f5fd00000000000000000000000000000000000000000000000000000000906117dd908b908b9086908a90602401612df9565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e086901b909216825261187092918890600401612e42565b6000604051808303818588803b15801561188957600080fd5b505af115801561189d573d6000803e3d6000fd5b50505050505050505050565b60006118d5827f1d1d8b630000000000000000000000000000000000000000000000000000000061217e565b806119055750611905827fec4fc8e30000000000000000000000000000000000000000000000000000000061217e565b92915050565b6000611937837f1d1d8b630000000000000000000000000000000000000000000000000000000061217e565b156119e0578273ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ab9190612d74565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050611905565b8273ffffffffffffffffffffffffffffffffffffffff1663d6c0b2c46040518163ffffffff1660e01b8152600401602060405180830381865afa158015611987573d6000803e3d6000fd5b60405173ffffffffffffffffffffffffffffffffffffffff8316602482015260448101829052610aa49084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526121a1565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611b7793929190612e87565b60405180910390a46110138686868686866122ad565b600080611b98612335565b5073ffffffffffffffffffffffffffffffffffffffff1673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee141592915050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2ac69ee804d9a7a0984249f508dfab7cb2534b465b6ce1580f99a38ba9c5e6318484604051611c2b929190612ec5565b60405180910390a36105b2848484846123d2565b600080600080845160208601878a8af19695505050505050565b3415611ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f5374616e646172644272696467653a2063616e6e6f742073656e642076616c7560448201527f65000000000000000000000000000000000000000000000000000000000000006064820152608401610214565b611cf0876118a9565b15611e3e57611cff878761190b565b611db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f5374616e646172644272696467653a2077726f6e672072656d6f746520746f6b60448201527f656e20666f72204f7074696d69736d204d696e7461626c65204552433230206c60648201527f6f63616c20746f6b656e00000000000000000000000000000000000000000000608482015260a401610214565b6040517f9dc29fac00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015260248201859052881690639dc29fac90604401600060405180830381600087803b158015611e2157600080fd5b505af1158015611e35573d6000803e3d6000fd5b50505050611ed2565b611e6073ffffffffffffffffffffffffffffffffffffffff881686308661243f565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152600260209081526040808320938a1683529290522054611e9e908490612ede565b73ffffffffffffffffffffffffffffffffffffffff8089166000908152600260209081526040808320938b16835292905220555b611ee087878787878661249d565b60035460045460405173ffffffffffffffffffffffffffffffffffffffff92831692633dbb202b9216907f0166a07a0000000000000000000000000000000000000000000000000000000090611f44908b908d908c908c908c908b90602401612ef6565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009485161790525160e085901b9092168252611fd792918790600401612e42565b600060405180830381600087803b158015611ff157600080fd5b505af1158015612005573d6000803e3d6000fd5b5050505050505050505050565b6109c987878787878787611c59565b600054610100900460ff166120b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610214565b6003805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560048054929093169116179055565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f35d79ab81f2b2017e19afb5c5571778877782d7a8786f5907f93b0f4702f4f23848460405161216a929190612ec5565b60405180910390a36105b28484848461252b565b60006121898361258a565b801561219a575061219a83836125ee565b9392505050565b6000612203826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166126bd9092919063ffffffff16565b805190915015610aa457808060200190518101906122219190612dd7565b610aa4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610214565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fd59c65b35445225835c83f50b6ede06a7be047d22e357073e250d9af537518cd86868660405161232593929190612e87565b60405180910390a4505050505050565b603354604080517f4397dfef0000000000000000000000000000000000000000000000000000000081528151600093849373ffffffffffffffffffffffffffffffffffffffff90911692634397dfef92600480830193928290030181865afa1580156123a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c99190612f51565b90939092509050565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f31b2166ff604fc5672ea5df08a78081d2bc6d746cadce880747f3643d819e83d8484604051612431929190612ec5565b60405180910390a350505050565b60405173ffffffffffffffffffffffffffffffffffffffff808516602483015283166044820152606481018290526105b29085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401611a7d565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d039686868660405161251593929190612e87565b60405180910390a46110138686868686866126d4565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f2849b43074093a05396b6f2a937dee8565b15a48a7b3d4bffb732a5017380af58484604051612431929190612ec5565b60006125b6827f01ffc9a7000000000000000000000000000000000000000000000000000000006125ee565b801561190557506125e7827fffffffff000000000000000000000000000000000000000000000000000000006125ee565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d915060005190508280156126a6575060208210155b80156126b25750600081115b979650505050505050565b60606126cc848460008561274c565b949350505050565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f7ff126db8024424bbfd9826e8ab82ff59136289ea440b04b39a0df1b03b9cabf86868660405161232593929190612e87565b6060824710156127de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610214565b73ffffffffffffffffffffffffffffffffffffffff85163b61285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610214565b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128859190612f86565b60006040518083038185875af1925050503d80600081146128c2576040519150601f19603f3d011682016040523d82523d6000602084013e6128c7565b606091505b50915091506126b2828286606083156128e157508161219a565b8251156128f15782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102149190612bf7565b73ffffffffffffffffffffffffffffffffffffffff8116811461294757600080fd5b50565b60008083601f84011261295c57600080fd5b50813567ffffffffffffffff81111561297457600080fd5b60208301915083602082850101111561298c57600080fd5b9250929050565b600080600080600080600060c0888a0312156129ae57600080fd5b87356129b981612925565b965060208801356129c981612925565b955060408801356129d981612925565b945060608801356129e981612925565b93506080880135925060a088013567ffffffffffffffff811115612a0c57600080fd5b612a188a828b0161294a565b989b979a50959850939692959293505050565b803563ffffffff81168114612a3f57600080fd5b919050565b600080600060408486031215612a5957600080fd5b612a6284612a2b565b9250602084013567ffffffffffffffff811115612a7e57600080fd5b612a8a8682870161294a565b9497909650939450505050565b600080600080600060808688031215612aaf57600080fd5b8535612aba81612925565b94506020860135612aca81612925565b935060408601359250606086013567ffffffffffffffff811115612aed57600080fd5b612af98882890161294a565b969995985093965092949392505050565b600080600080600080600060c0888a031215612b2557600080fd5b8735612b3081612925565b96506020880135612b4081612925565b95506040880135612b5081612925565b945060608801359350612b6560808901612a2b565b925060a088013567ffffffffffffffff811115612a0c57600080fd5b60005b83811015612b9c578181015183820152602001612b84565b838111156105b25750506000910152565b60008151808452612bc5816020860160208601612b81565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061219a6020830184612bad565b60008060008060008060a08789031215612c2357600080fd5b8635612c2e81612925565b95506020870135612c3e81612925565b945060408701359350612c5360608801612a2b565b9250608087013567ffffffffffffffff811115612c6f57600080fd5b612c7b89828a0161294a565b979a9699509497509295939492505050565b60008060408385031215612ca057600080fd5b8235612cab81612925565b91506020830135612cbb81612925565b809150509250929050565b60008060008060608587031215612cdc57600080fd5b8435612ce781612925565b9350612cf560208601612a2b565b9250604085013567ffffffffffffffff811115612d1157600080fd5b612d1d8782880161294a565b95989497509550505050565b600080600060608486031215612d3e57600080fd5b8335612d4981612925565b92506020840135612d5981612925565b91506040840135612d6981612925565b809150509250925092565b600060208284031215612d8657600080fd5b815161219a81612925565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612dd257612dd2612d91565b500390565b600060208284031215612de957600080fd5b8151801515811461219a57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612e386080830184612bad565b9695505050505050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201526000612e716060830185612bad565b905063ffffffff83166040830152949350505050565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000612ebc6060830184612bad565b95945050505050565b8281526040602082015260006126cc6040830184612bad565b60008219821115612ef157612ef1612d91565b500190565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a0830152612f4560c0830184612bad565b98975050505050505050565b60008060408385031215612f6457600080fd5b8251612f6f81612925565b602084015190925060ff81168114612cbb57600080fd5b60008251612f98818460208701612b81565b919091019291505056fea164736f6c634300080f000a"; bytes internal constant l1ERC721BridgeCode = hex"608060405234801561001057600080fd5b50600436106100d45760003560e01c80635d93a3fc11610081578063927ede2d1161005b578063927ede2d14610231578063aa5574521461024f578063c89701a21461026257600080fd5b80635d93a3fc146101cc578063761f4493146102005780637f46ddb21461021357600080fd5b8063485cc955116100b2578063485cc9551461015857806354fd4d501461016b5780635c975abb146101b457600080fd5b806335e80ab3146100d95780633687011a146101235780633cb747bf14610138575b600080fd5b6032546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b610136610131366004610fe1565b610282565b005b6001546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b610136610166366004611064565b61032e565b6101a76040518060400160405280600581526020017f322e312e3000000000000000000000000000000000000000000000000000000081525081565b60405161011a9190611108565b6101bc610518565b604051901515815260200161011a565b6101bc6101da366004611122565b603160209081526000938452604080852082529284528284209052825290205460ff1681565b61013661020e366004611163565b6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff166100f9565b60015473ffffffffffffffffffffffffffffffffffffffff166100f9565b61013661025d3660046111fb565b610a58565b6002546100f99073ffffffffffffffffffffffffffffffffffffffff1681565b333b15610316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732314272696467653a206163636f756e74206973206e6f742065787460448201527f65726e616c6c79206f776e65640000000000000000000000000000000000000060648201526084015b60405180910390fd5b6103268686333388888888610b30565b505050505050565b600054610100900460ff161580801561034e5750600054600160ff909116105b806103685750303b158015610368575060005460ff166001145b6103f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161030d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561045257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556104b083734200000000000000000000000000000000000014610e70565b801561051357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b603254604080517f5c975abb000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691635c975abb9160048083019260209291908290030181865afa158015610588573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ac9190611272565b905090565b60015473ffffffffffffffffffffffffffffffffffffffff16331480156106865750600254600154604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff9384169390921691636e296e45916004808201926020929091908290030181865afa15801561064a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061066e9190611294565b73ffffffffffffffffffffffffffffffffffffffff16145b610712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4552433732314272696467653a2066756e6374696f6e2063616e206f6e6c792060448201527f62652063616c6c65642066726f6d20746865206f746865722062726964676500606482015260840161030d565b61071a610518565b15610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c314552433732314272696467653a2070617573656400000000000000000000604482015260640161030d565b3073ffffffffffffffffffffffffffffffffffffffff881603610826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f4c314552433732314272696467653a206c6f63616c20746f6b656e2063616e6e60448201527f6f742062652073656c6600000000000000000000000000000000000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff8088166000908152603160209081526040808320938a1683529281528282208683529052205460ff1615156001146108f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4c314552433732314272696467653a20546f6b656e204944206973206e6f742060448201527f657363726f77656420696e20746865204c312042726964676500000000000000606482015260840161030d565b73ffffffffffffffffffffffffffffffffffffffff87811660008181526031602090815260408083208b8616845282528083208884529091529081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f42842e0e000000000000000000000000000000000000000000000000000000008152306004820152918616602483015260448201859052906342842e0e90606401600060405180830381600087803b1580156109b557600080fd5b505af11580156109c9573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f1f39bf6707b5d608453e0ae4c067b562bcc4c85c0f562ef5d2c774d2e7f131ac87878787604051610a4794939291906112fa565b60405180910390a450505050505050565b73ffffffffffffffffffffffffffffffffffffffff8516610afb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4552433732314272696467653a206e667420726563697069656e742063616e6e60448201527f6f74206265206164647265737328302900000000000000000000000000000000606482015260840161030d565b610b0b8787338888888888610b30565b50505050505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b73ffffffffffffffffffffffffffffffffffffffff8716610bd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4c314552433732314272696467653a2072656d6f746520746f6b656e2063616e60448201527f6e6f742062652061646472657373283029000000000000000000000000000000606482015260840161030d565b600063761f449360e01b888a8989898888604051602401610bfa979695949392919061133a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000959095169490941790935273ffffffffffffffffffffffffffffffffffffffff8c81166000818152603186528381208e8416825286528381208b82529095529382902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590517f23b872dd000000000000000000000000000000000000000000000000000000008152908a166004820152306024820152604481018890529092506323b872dd90606401600060405180830381600087803b158015610d3a57600080fd5b505af1158015610d4e573d6000803e3d6000fd5b50506001546002546040517f3dbb202b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283169450633dbb202b9350610db1929091169085908990600401611397565b600060405180830381600087803b158015610dcb57600080fd5b505af1158015610ddf573d6000803e3d6000fd5b505050508673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff167fb7460e2a880f256ebef3406116ff3eee0cee51ebccdc2a40698f87ebb2e9c1a589898888604051610e5d94939291906112fa565b60405180910390a4505050505050505050565b600054610100900460ff16610f07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161030d565b6001805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560028054929093169116179055565b73ffffffffffffffffffffffffffffffffffffffff81168114610f7c57600080fd5b50565b803563ffffffff81168114610f9357600080fd5b919050565b60008083601f840112610faa57600080fd5b50813567ffffffffffffffff811115610fc257600080fd5b602083019150836020828501011115610fda57600080fd5b9250929050565b60008060008060008060a08789031215610ffa57600080fd5b863561100581610f5a565b9550602087013561101581610f5a565b94506040870135935061102a60608801610f7f565b9250608087013567ffffffffffffffff81111561104657600080fd5b61105289828a01610f98565b979a9699509497509295939492505050565b6000806040838503121561107757600080fd5b823561108281610f5a565b9150602083013561109281610f5a565b809150509250929050565b6000815180845260005b818110156110c3576020818501810151868301820152016110a7565b818111156110d5576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061111b602083018461109d565b9392505050565b60008060006060848603121561113757600080fd5b833561114281610f5a565b9250602084013561115281610f5a565b929592945050506040919091013590565b600080600080600080600060c0888a03121561117e57600080fd5b873561118981610f5a565b9650602088013561119981610f5a565b955060408801356111a981610f5a565b945060608801356111b981610f5a565b93506080880135925060a088013567ffffffffffffffff8111156111dc57600080fd5b6111e88a828b01610f98565b989b979a50959850939692959293505050565b600080600080600080600060c0888a03121561121657600080fd5b873561122181610f5a565b9650602088013561123181610f5a565b9550604088013561124181610f5a565b94506060880135935061125660808901610f7f565b925060a088013567ffffffffffffffff8111156111dc57600080fd5b60006020828403121561128457600080fd5b8151801515811461111b57600080fd5b6000602082840312156112a657600080fd5b815161111b81610f5a565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff851681528360208201526060604082015260006113306060830184866112b1565b9695505050505050565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a083015261138a60c0830184866112b1565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff841681526060602082015260006113c6606083018561109d565b905063ffffffff8316604083015294935050505056fea164736f6c634300080f000a"; } From be9bf5a93b25786dbd5379079cf54acbad398eb3 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 1 May 2024 22:26:37 -0600 Subject: [PATCH 36/45] snapshots: gas snapshot --- packages/contracts-bedrock/.gas-snapshot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index bdff093f8a6..c807199d189 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -1,7 +1,7 @@ GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 369354) GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2967561) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 562014) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4073990) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 562033) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4074009) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 466942) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3512691) GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 72605) From ac36c38e05392f13c4161a000dc5cc9b6d9662dd Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Wed, 1 May 2024 22:29:47 -0600 Subject: [PATCH 37/45] semver-lock: regenerate --- packages/contracts-bedrock/semver-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 13aebaec0df..886b90d6d52 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -24,7 +24,7 @@ "sourceCodeHash": "0xd57acdbd001941e75cf4326ba7c1bdad809912f10b1e44ffaebe073917cdd296" }, "src/L1/L1StandardBridge.sol": { - "initCodeHash": "0xa00156c877db0317663816dfa1ae124088e3620c0f1bc6ebfb41bf79c6df07dd", + "initCodeHash": "0xf46dc2d8e171bd5aebbafe31386e9d27323a124b1b99f378cb8f67ab22225a7b", "sourceCodeHash": "0x0d07e526c1891abb81c7e94f73642caa8ee386ab036b3b2a67f1b21ca85089c5" }, "src/L1/L2OutputOracle.sol": { @@ -84,8 +84,8 @@ "sourceCodeHash": "0xa7646a588275046f92525ef121e5a0fe149e7752ea51fe62f7e0686a21153542" }, "src/L2/L2StandardBridge.sol": { - "initCodeHash": "0xc4d2a5313812e84fd66f32acc15d7fc7bb8ef7fa53bb23da81df02a12b6464ae", - "sourceCodeHash": "0x81f6a627e61fd1e7fd7bde6d7ea8bfff143042a20722d91e19fd29461e60dfe6" + "initCodeHash": "0x4d7e23702aa5627f78842b2b06e0ee0eec1ea63cf6552b652f4c8bdb56e1c8f4", + "sourceCodeHash": "0xdcc25b014f09dc586092170888c22cdc80f0691856a6bc59e0e13421b2157bff" }, "src/L2/L2ToL1MessagePasser.sol": { "initCodeHash": "0x08bbede75cd6dfd076903b8f04d24f82fa7881576c135825098778632e37eebc", From 0240cdfa78b924f4390f0a29ead72c8aa561cde1 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 2 May 2024 09:03:14 -0600 Subject: [PATCH 38/45] comments: address --- .../src/L2/L2StandardBridge.sol | 3 ++ .../test/L2/L2StandardBridge.t.sol | 43 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol index e633fda2ee0..0b45269783e 100644 --- a/packages/contracts-bedrock/src/L2/L2StandardBridge.sol +++ b/packages/contracts-bedrock/src/L2/L2StandardBridge.sol @@ -85,6 +85,7 @@ contract L2StandardBridge is StandardBridge, ISemver { /// @notice Initiates a withdrawal from L2 to L1. /// This function only works with OptimismMintableERC20 tokens or ether. Use the /// `bridgeERC20` function to bridge native L2 tokens to L1. + /// Subject to be deprecated in the future. /// @param _l2Token Address of the L2 token to withdraw. /// @param _amount Amount of the L2 token to withdraw. /// @param _minGasLimit Minimum gas limit to use for the transaction. @@ -112,6 +113,7 @@ contract L2StandardBridge is StandardBridge, ISemver { /// call will fail for any amount of gas, then the ETH will be locked permanently. /// This function only works with OptimismMintableERC20 tokens or ether. Use the /// `bridgeERC20To` function to bridge native L2 tokens to L1. + /// Subject to be deprecated in the future. /// @param _l2Token Address of the L2 token to withdraw. /// @param _to Recipient account on L1. /// @param _amount Amount of the L2 token to withdraw. @@ -135,6 +137,7 @@ contract L2StandardBridge is StandardBridge, ISemver { /// @custom:legacy /// @notice Finalizes a deposit from L1 to L2. To finalize a deposit of ether, use address(0) /// and the l1Token and the Legacy ERC20 ether predeploy address as the l2Token. + /// Subject to be deprecated in the future. /// @param _l1Token Address of the L1 token to deposit. /// @param _l2Token Address of the corresponding L2 token. /// @param _from Address of the depositor. diff --git a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol index 1aa7218e0e4..944408a89e3 100644 --- a/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol +++ b/packages/contracts-bedrock/test/L2/L2StandardBridge.t.sol @@ -162,6 +162,15 @@ contract L2StandardBridge_Test is Bridge_Initializer { l2StandardBridge.withdraw{ value: 100 }(address(L2Token), 100, 1, hex""); } + /// @dev Tests that `withdrawTo` reverts when sending value and attempting to withdraw + /// an ERC20 token. This prevents ether from being stuck in the contract. + function test_withdrawTo_erc20WithValue_reverts() external { + vm.deal(alice, 100); + vm.expectRevert("StandardBridge: cannot send value"); + vm.prank(alice, alice); + l2StandardBridge.withdrawTo{ value: 100 }(address(L2Token), alice, 100, 1, hex""); + } + /// @dev Tests that `withdraw` reverts with custom gas token. function test_withdraw_customGasToken_reverts() external { vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18))); @@ -170,6 +179,23 @@ contract L2StandardBridge_Test is Bridge_Initializer { l2StandardBridge.withdraw(address(Predeploys.LEGACY_ERC20_ETH), 1, 1, hex""); } + /// @dev Tests that `withdraw` reverts with custom gas token. + function test_withdrawERC20_customGasToken_reverts() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18))); + vm.expectRevert("L2StandardBridge: not supported with custom gas token"); + vm.prank(alice, alice); + l2StandardBridge.withdraw(address(L1Token), 1, 1, hex""); + } + + /// @dev Tests that `withdraw` reverts with custom gas token. + function test_withdrawERC20WithValue_customGasToken_reverts() external { + vm.deal(alice, 1 ether); + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18))); + vm.expectRevert("L2StandardBridge: not supported with custom gas token"); + vm.prank(alice, alice); + l2StandardBridge.withdraw{ value: 1 ether }(address(L1Token), 1, 1, hex""); + } + /// @dev Tests that `withdraw` with value reverts with custom gas token. function test_withdraw_customGasTokenWithValue_reverts() external { vm.deal(alice, 1 ether); @@ -187,6 +213,23 @@ contract L2StandardBridge_Test is Bridge_Initializer { l2StandardBridge.withdrawTo(address(Predeploys.LEGACY_ERC20_ETH), bob, 1, 1, hex""); } + /// @dev Tests that `withdrawTo` reverts with custom gas token. + function test_withdrawToERC20_customGasToken_reverts() external { + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18))); + vm.expectRevert("L2StandardBridge: not supported with custom gas token"); + vm.prank(alice, alice); + l2StandardBridge.withdrawTo(address(L2Token), bob, 1, 1, hex""); + } + + /// @dev Tests that `withdrawTo` reverts with custom gas token. + function test_withdrawToERC20WithValue_customGasToken_reverts() external { + vm.deal(alice, 1 ether); + vm.mockCall(address(l1Block), abi.encodeWithSignature("gasPayingToken()"), abi.encode(address(1), uint8(18))); + vm.expectRevert("L2StandardBridge: not supported with custom gas token"); + vm.prank(alice, alice); + l2StandardBridge.withdrawTo{ value: 1 ether }(address(L2Token), bob, 1, 1, hex""); + } + /// @dev Tests that `withdrawTo` with value reverts with custom gas token. function test_withdrawTo_customGasTokenWithValue_reverts() external { vm.deal(alice, 1 ether); From 9a410d98e0db1ffd1f455724159481326e77f97f Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 2 May 2024 09:03:39 -0600 Subject: [PATCH 39/45] semver: calculate --- packages/contracts-bedrock/semver-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index 886b90d6d52..a938bbb9b02 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -85,7 +85,7 @@ }, "src/L2/L2StandardBridge.sol": { "initCodeHash": "0x4d7e23702aa5627f78842b2b06e0ee0eec1ea63cf6552b652f4c8bdb56e1c8f4", - "sourceCodeHash": "0xdcc25b014f09dc586092170888c22cdc80f0691856a6bc59e0e13421b2157bff" + "sourceCodeHash": "0x55a865c85406b3e1414ab4e9f03a902855300272321b4eebcdfdc284e51fb2df" }, "src/L2/L2ToL1MessagePasser.sol": { "initCodeHash": "0x08bbede75cd6dfd076903b8f04d24f82fa7881576c135825098778632e37eebc", From 0dccbae39ff3b357f63fd13dd38729853446abba Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 2 May 2024 11:39:01 -0600 Subject: [PATCH 40/45] ctb: revert in test --- packages/contracts-bedrock/test/L1/OptimismPortal.t.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index 4636ec67de2..1934194d7e4 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -541,7 +541,7 @@ contract OptimismPortal_FinalizeWithdrawal_Test is CommonTest { target: bob, value: 100, gasLimit: 100_000, - data: hex"aa" + data: hex"" }); // Get withdrawal proof data we can use for testing. (_stateRoot, _storageRoot, _outputRoot, _withdrawalHash, _withdrawalProof) = From 4f05c00382360d11d8523d8768fa6a451039a15a Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 2 May 2024 11:41:05 -0600 Subject: [PATCH 41/45] tests: fix flake --- packages/contracts-bedrock/test/L1/OptimismPortal.t.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index 1934194d7e4..9cccb8f8b3a 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -472,6 +472,7 @@ contract OptimismPortal_Test is CommonTest { /// @dev Tests that the gas paying token cannot be set by a non-system config. function test_setGasPayingToken_notSystemConfig_fails(address _caller) external { + vm.assume(_caller != address(systemConfig)); vm.prank(_caller); vm.expectRevert(Unauthorized.selector); optimismPortal.setGasPayingToken({ _token: address(0), _decimals: 0, _name: "", _symbol: "" }); From e532b85d1dff30a7a200dbe1b0c332d872c905a4 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 2 May 2024 12:02:25 -0600 Subject: [PATCH 42/45] portal: better comment --- packages/contracts-bedrock/semver-lock.json | 2 +- packages/contracts-bedrock/src/L1/OptimismPortal.sol | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/semver-lock.json b/packages/contracts-bedrock/semver-lock.json index a938bbb9b02..1dff7c22dbf 100644 --- a/packages/contracts-bedrock/semver-lock.json +++ b/packages/contracts-bedrock/semver-lock.json @@ -33,7 +33,7 @@ }, "src/L1/OptimismPortal.sol": { "initCodeHash": "0x8ca0ac98c37ad221d679c744b295b1b38742bfebac050f789197d658951709f5", - "sourceCodeHash": "0xecaabf75adc0351dfc79139664ac54731a4ec6cfda9c1c50e58105ee1d4d157e" + "sourceCodeHash": "0x8e9221539290a9b3cfb933d30ab77b137e2a76a1481671e41469ed1014ffbdc4" }, "src/L1/OptimismPortal2.sol": { "initCodeHash": "0xea32d79e8297956d4f9a4c7985bb53ff8bb3735e5b307d4e118fea71f503a38e", diff --git a/packages/contracts-bedrock/src/L1/OptimismPortal.sol b/packages/contracts-bedrock/src/L1/OptimismPortal.sol index 68daf149fe8..bb81e9b2af6 100644 --- a/packages/contracts-bedrock/src/L1/OptimismPortal.sol +++ b/packages/contracts-bedrock/src/L1/OptimismPortal.sol @@ -428,6 +428,9 @@ contract OptimismPortal is Initializable, ResourceMetering, ISemver { } /// @notice Entrypoint to depositing an ERC20 token as a custom gas token. + /// This function depends on a well formed ERC20 token. There are only + /// so many checks that can be done on chain for this so it is assumed + /// that chain operators will deploy chains with well formed ERC20 tokens. /// @param _to Target address on L2. /// @param _mint Units of ERC20 token to deposit into L2. /// @param _value Units of ERC20 token to send on L2 to the recipient. From 25fef607d534b974d244d552a2c4e478af106fee Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 2 May 2024 12:15:21 -0600 Subject: [PATCH 43/45] test: fixup --- packages/contracts-bedrock/test/L1/OptimismPortal.t.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index 9cccb8f8b3a..c0b20ee8731 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -542,7 +542,7 @@ contract OptimismPortal_FinalizeWithdrawal_Test is CommonTest { target: bob, value: 100, gasLimit: 100_000, - data: hex"" + data: hex"aa" // includes calldata for ERC20 withdrawal test }); // Get withdrawal proof data we can use for testing. (_stateRoot, _storageRoot, _outputRoot, _withdrawalHash, _withdrawalProof) = From 4417094eee5f53a4a1ee72246f720388549990d1 Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 2 May 2024 13:43:48 -0600 Subject: [PATCH 44/45] lint: fix --- packages/contracts-bedrock/test/L1/OptimismPortal.t.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol index c0b20ee8731..4ea63e93938 100644 --- a/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/test/L1/OptimismPortal.t.sol @@ -543,7 +543,7 @@ contract OptimismPortal_FinalizeWithdrawal_Test is CommonTest { value: 100, gasLimit: 100_000, data: hex"aa" // includes calldata for ERC20 withdrawal test - }); + }); // Get withdrawal proof data we can use for testing. (_stateRoot, _storageRoot, _outputRoot, _withdrawalHash, _withdrawalProof) = ffi.getProveWithdrawalTransactionInputs(_defaultTx); From c21302e37641567179b78ab7b1049e968e1caddd Mon Sep 17 00:00:00 2001 From: Mark Tyneway Date: Thu, 2 May 2024 13:44:30 -0600 Subject: [PATCH 45/45] snapshot: gas --- packages/contracts-bedrock/.gas-snapshot | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index c807199d189..ab4c6295ddc 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -1,11 +1,11 @@ -GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 369354) -GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2967561) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 562033) -GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4074009) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 466942) -GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3512691) -GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 72605) +GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_0() (gas: 369398) +GasBenchMark_L1CrossDomainMessenger:test_sendMessage_benchmark_1() (gas: 2967433) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 562077) +GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 4074053) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 467008) +GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 3512757) +GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 72627) GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 92973) -GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 68431) -GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 68923) +GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 68453) +GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 68945) GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 155567) \ No newline at end of file